参见下面的更新
我正在经历一堆Perl脚本,这些脚本都是我公司的人编写的。他使用join连接字符串。例如,他这样做(从真正的Perl脚本中删除):
$fullpath=join "", $Upload_Loc, "/", "$filename";而不是这样:
$fullpath = "$Upload_Loc" . "/" . "$filename";甚至只是这个:
$fullpath = "$Upload_Loc/$filename";他已经不在这里了,但是在场的人告诉我,他用这种方式连接字符串,因为这样做更好。(他们不太清楚原因)。
那么,为什么会有人在这件事上使用join而不是使用.连接操作符,或者像第三个例子那样只在一起键入字符串?这种编码方式是否有正当的理由?
我正在努力清理这里的烂摊子,我的第一个想法是结束这种做法。它使代码更难阅读,而且我确信,执行join并不是连接字符串的非常有效的方法。然而,尽管从3.x版本开始我就一直在用Perl编写脚本,但我并不认为自己是一位大师,因为我从来没有机会与那些比我更优秀的人在一起,并且可以教我Perl的深层秘密。在我出丑之前,我只想确认一下我的直觉是正确的。
我在这里有更好的方法。
更新
人们都很困惑。他不只是为了连接路径。下面是另一个例子:
$hotfix=join "", "$app", "_", "$mod", "_", "$bld", "_", "$hf", ".zip";就像我所做的那样:
$hotfix = $app . "_" $mod . "_" . $bld . "_" . "$hf.zip";或者,更有可能
$hotfix = "${app}_${mod}_${bld}_${hf}.zip";或者在本例中,我可能实际上使用了join,因为下划线会导致问题:
$hotfix = join("_", $app, $mod, $bld, $hf) . ".zip";我的问题仍然是:他是否在做真正的Perl黑客知道的事情,而像我这样只做了15年的新手却不知道呢?人们会看着我用.连接字符串,还是把它们放在引号里,然后说:“哈!真是个菜鸟!我敢打赌他也有一台麦金塔!”
或者,前一个人只是有一种独特的编程风格,就像我儿子独特的驾驶风格,包括迎头赶上树?
发布于 2010-11-18 19:20:30
我为“一家知名的在线零售商”做了相当一部分的商业Perl开发,我从未见过join被这样使用过。您的第三个例子将是我的首选选择,因为它简单,干净和可读性。
和这里的其他人一样,我认为使用join作为性能增强器没有任何真正的价值。它的性能可能略好于字符串插值,但我无法想象现实世界的情况,即优化是合理的,但代码仍然用脚本语言编写。
正如这个问题所显示的,深奥的编程习语(在任何语言中)只会导致很多误解。如果你幸运的话,误解是善意的。与我一起工作的开发人员是那些为可读性和一致性编写代码并将Perl留给周末使用的开发人员。:)
简而言之:是的,我认为他独特的风格类似于你儿子独特的驾驶风格。:)
发布于 2010-11-18 16:56:36
我会考虑
$fullpath = join "/", $Upload_Loc, $filename;比其他选择更清楚。然而,档案::Spec长期以来一直处于核心地位,所以
use File::Spec::Functions qw( catfile );
# ...
$fullpath = catfile $Upload_Loc, $filename;好多了。而且,更好的是,还有路径::类
use Path::Class;
my $fullpath = file($Upload_Loc, $filename);速度通常不是我在连接文件名和路径时考虑的一个因素。
您在更新中给出的示例:
$hotfix=join "", "$app", "_", "$mod", "_", "$bld", "_", "$hf", ".zip";证明了为什么这家伙是无名小卒。首先,不需要对这些单独的变量进行插值。第二,最好写成
$hotfix = join '_', $app, $mod, $bld, "$hf.zip";或者,或者,作为
$hotfix = sprintf '%s_%s_%s_%s.zip', $app, $mod, $bld, $hf;减少不必要的标点符号是我的最终目标。
发布于 2010-11-18 16:57:05
通常,除非要加入的项目列表很大,否则您将不会看到性能差异会将它们更改为级联。主要关注的是可读性和可维护性,在这种情况下,如果字符串内插形式更清晰,您当然可以使用它。
我想这只是最初程序员的个人编码偏好。
通常,当列表的长度很大/未知时,或者如果我连接的是空字符串(或用于数组内插的单个空格),则使用join。否则,使用.或简单的字符串插值通常更短,更容易阅读。
https://stackoverflow.com/questions/4217369
复制相似问题