ひし形演算子 とは、次の<>
ことを意味します。
の名前を見て、@ARGV
開きたいファイルとして扱います。あたかも 1 つの大きなファイルであるかのように、それらすべてをループするだけです。実際、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: $!";
には失敗の$!
理由が含まれています。ingの代わりにdie
、他のエラー回復を行うことができます。
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
}
}