微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 如何让Perl遍历目录中的所有文件?

我有一个包含的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:glob’/etc/puppet/nodes/*.pp’在Perl中进行评估.

加上一些风格改进:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐