Jam*_*yyy 6 perl glob command-line-arguments
我试图在我的 Perl 目录中循环一些文件。假设我当前的目录包含:song0.txt、song1.txt、song2.txt、song3.txt、song4.txt。
我提供“song?.txt”作为我程序的参数。
当我做:
foreach $file (glob "$ARGV[0]") {
printf "$file\n";
}
Run Code Online (Sandbox Code Playgroud)
它在打印“song0.txt”后停止。
但是,如果我将“$ARGV[0]”替换为“song?.txt”,它会按预期打印出所有 5 个。为什么 Perl glob 不能处理变量,我该怎么做才能解决这个问题?
当你打电话给你的程序与song?.txt外壳扩展了?如此
prog.pl song?.txt --> prog.pl song0.txt song1.txt ...
Run Code Online (Sandbox Code Playgroud)
因此"$ARGV[0]",在程序中song0.txt,Perlglob与它无关。
所以你要么做
foreach my $file (@ARGV) { }
Run Code Online (Sandbox Code Playgroud)
并使用 调用程序prog.pl song?.txt,或在 Perl 中进行通配
foreach my $file (glob "song?.txt") { ... }
Run Code Online (Sandbox Code Playgroud)
现在 Perl 的glob将构建?模式中使用的文件列表。
两者中的哪一个“更好”取决于上下文。但是我宁愿向程序提交一个直接的文件列表,如果这是一个平等的选择,而不是纠缠在glob程序中的-ing 模式中。
另请注意,Perlglob是一个古老的“恶魔”,在某些情况下具有“有趣”的行为。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |