File :: Spec真的有必要吗?

时间:2011-07-14 02:07:27

标签: perl

我知道不同操作系统具有不同路径格式的历史记录,但此时似乎存在关于路径如何工作的一般协议(有一种不相关的保持*)。我发现路径管理的整个File::Spec路径是笨重而且无用的痛苦。

是否真的值得拥有这套巴洛克式的功能来操纵路径?请说服我,我是短视的。

*无关紧要,因为即使是MS Windows也允许在路径中使用正斜杠,这意味着唯一一个时髦的东西就是开始时的音量,这对我来说从未真正成为问题。

5 个答案:

答案 0 :(得分:7)

两个主要系统都有卷。什么是C的父母:?在unix中,它是C:/..。在Windows中,它是C:..。 (不幸的是,大多数人滥用File :: Spec来打破这个。)

主要系统中有三组不同的路径分隔符。 Windows支持“/”的事实可以简化构建路径,但它无法帮助解析它们或对它们进行标记。

File :: Spec还提供了有用的功能,即使每个系统都使用相同类型的路径,例如将路径转换为相对路径的路径,它也会很有用。

那就是说,我从不使用File :: Spec。我改用Path::Class。在不牺牲任何可用性或实用性的情况下,Path :: Class提供了更好的界面。并且它不会让用户误操作。

答案 1 :(得分:3)

是绝对的。

编程的黄金法则,绝不是硬编码字符串文字。
编辑:避免移植问题的最佳方法之一是避免操作系统特定的常量,特别是以内联文字的形式。

<击> 即例如drive +“:/”+ path +“/”+ filename

这是不好的做法我们都在当下匆忙中提交这些暴行,或者因为这段代码无关紧要。 File :: Spec适用于程序员遵守福音编程的时候。

此外,它还提供特殊和常用系统目录的值,例如tmp或devnull,它们可以在不同的分发/操作系统之间变化。

如果有任何其他成员可能会添加到其中,例如用户指向用户主目录

答案 2 :(得分:3)

对于Perl中的常规文件管理,不需要File :: Spec,并且在任何地方使用正向slash都会减少痛苦,并且无论如何都可以在Win32上运行。

cpanminus是许多人使用的一个很好的例子,并且已经证明在win32平台上工作得很好。它不使用File :: Spec进行大多数文件路径操作,只使用正斜杠 - 有经验的Perl-Win32开发人员甚至建议这样做。

我唯一需要在cpanm中使用File :: Spec的catfile的地方是从perl错误消息(Can't locate File\Path.pm blah blah)中提取文件路径并创建文件路径以传递给命令行(即cmd.exe)。

同时File :: Spec提供了有用的功能,例如canonical和rel2abs - 这本身并不“必要”,但确实很有用。

答案 3 :(得分:1)

makepp(makepp.sourceforge.net)有一个makefile变量$ /,它是/或\(在非Cygwin Win上)。原因是Win接受/在文件名中,但不在命令名中(它启动一个选项)。

答案 4 :(得分:0)

来自http://perldoc.perl.org/File/Spec.html

  

catdir

     

连接两个或多个目录名以形成以目录结尾的完整路径。但是从结果字符串中删除尾部斜杠,因为它看起来不太好,不是必需的并且会混淆OS / 2。当然,如果这是根目录,请不要切断尾部斜杠: - )

例如,在example中,如果我使用catdir,我就不需要正则表达式来删除尾部斜杠。

相关问题