钻石算子 的<>
意思是:
查看其中的名称@ARGV
并将它们视为要打开的文件。只需遍历所有这些,就好像它们是一个大文件一样。实际上,Perl 使用 ARGV 文件句柄来达到这个目的
如果没有给出命令行参数,请STDIN
改用。
因此,如果一个文件不存在,Perl 会给您一个错误消息 ( Can't open nonexistant_file: ...
) 并继续处理下一个文件。这是你通常想要的。如果不是这种情况,请手动执行。从perlop
页面窃取:
unshift(@ARGV, '-') unless @ARGV;
FILE: while ($ARGV = shift) {
open(ARGV, $ARGV);
LINE: while (<ARGV>) {
... # code for each line
}
}
遇到问题时,该open
函数返回一个假值。所以总是open
像这样调用
open my $filehandle "<", $filename or die "Can't open $filename: $!";
包含失败的$!
原因。除了die
ing,我们还可以做一些其他的错误恢复:
use feature qw(say);
@ARGV or @ARGV = "-"; # the - symbolizes STDIN
FILE: while (my $filename = shift @ARGV) {
my $filehandle;
unless (open $filehandle, "<", $filename) {
say qq(Oh dear, I can't open "$filename". What do you wan't me to do?);
my $tries = 5;
do {
say qq(Type "q" to quit, or "n" for the next file);
my $response = <STDIN>;
exit if $response =~ /^q/i;
next FILE if $response =~ /^n/i;
say "I have no idea what that meant.";
} while --$tries;
say "I give up" and exit!!1;
}
LINE: while (my $line = <$filehandle>) {
# do something with $line
}
}