我很难理解这个foreach的作用,我是perl编程的新手
-e && print ("$_\n") foreach $base_name, "build/$base_name";
这里构建是目录。感谢
答案 0 :(得分:11)
不是很漂亮的代码,有人把你留在那里。 :(
中的任何一个
for ($basename, "build/$basename") { say if -e }
或
for my $file ($basename, "build/$basename") {
say $file if -e $file;
}
会更清楚。
答案 1 :(得分:6)
检查文件是否存在,如果存在,则打印其名称。
可以用更清晰的方式编写。
迭代$ base_name然后构建/ $ base_name,而文件名在$ base_name
答案 2 :(得分:4)
它基本上与:
相同foreach( $base_name, "build/$base_name" ){
if( -e ){
print ("$_\n");
}
}
答案 3 :(得分:2)
我希望无论谁写的都不多产。
以更清晰的方式做同样事情有多少种方式?
grep过滤列表并删除任何对检查条件返回false的内容。
正在考虑的当前值设置为$_
,因此使用文件测试运算符非常方便。
由于say
和print
都能很好地处理字符串列表,因此在将输出传递给它们之前对其进行过滤是有意义的。
say grep -e, $base_name, "build/$base_name";
在没有say
的较旧的perls上,map
有时用于在打印前将新行应用于输出。
print map "$_\n", grep -e, $base_name, "build/$base_name";
这里我们安全地使用语句修饰符if
。恕我直言,只要LHS保持非常简单,语句修饰符形式就会非常方便。
表示我的$ dir($ base_name,“build / $ base_name”){ 打印“$ dir \ n”if -e $ dir; }
仍然像罪一样丑陋,但是分手并使用一些额外的parens有助于识别循环的内容并将其与循环代码分开。
-e && print("$_\n")
foreach( $base_name, "build/$base_name" );
这样更好,但请不要这样做。如果你想($foo if $bar) for @baz;
DON“T 。使用一个完整大小的块。我可以在我的生活中计算一次使用$bar and $foo for @baz
这样的sub print_existing_files { -e && print ("$_\n") foreach @_; }
构造一个 - 使用它可能是错误的。
OP的神秘代码如果仅仅包含在一个有良好名字的子代中则更好。
我会以最熟悉的方式写下这个:
until
潜艇的主体仍然是一个谜题,但至少在名称中有某种线索。
我确信我遗漏了很多关于如何做到这一点的变化(我没有任何使用{{1}}的东西,并且附近任何非故意混淆的东西都会更清楚)。但这不是重点。
关键在于,在任何语言中都有很多方法可以实现任何给定的任务。因此,重要的是,在系统上工作的每个程序员都要留意那些关注的人。
代码的存在有两个目的:与未来的程序员沟通,并按顺序指示计算机如何操作。