我有一个包含 Perl 脚本
open (FILE, '<', "$ARGV[0]") || die "Unable to open $ARGV[0]\n";
while (defined (my $line = <FILE>)) {
# do stuff
}
close FILE;
我想在目录中的所有 .pp
文件上运行这个脚本,所以我用 Bash 编写了一个包装器脚本
#!/bin/bash
for f in /etc/puppet/nodes/*.pp; do
/etc/puppet/nodes/brackets.pl $f
done
问题
是否可以避免包装器脚本并让 Perl 脚本来代替它?
最佳答案
是的。
for f in ...;
转换为 Perl
对于我的 $f (...) { ... }
(在列表的情况下)或while (my $f = ...) { ... }
(在迭代器的情况下)。
您使用的 glob 表达式 (/etc/puppet/nodes/*.pp
) 可以通过 glob
function 在 Perl 中计算: glob '/etc/puppet/nodes/*.pp'
。
连同一些样式改进:
use strict; use warnings;
use autodie; # automatic error handling
while (defined(my $file = glob '/etc/puppet/nodes/*.pp')) {
open my $fh, "<", $file; # lexical file handles, automatic error handling
while (defined( my $line = <$fh> )) {
do stuff;
}
close $fh;
}
然后:
$ /etc/puppet/nodes/brackets.pl
关于linux - 如何让 Perl 遍历目录中的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18252875/