先に進み、*ARGV
型グロブまたは\*ARGV
その参照を渡します。関数が最終的にそれを利用することを確認してください<$fh>
or readline($fh)
、その基礎となる機能的に同等です。
perlvar のマンページから引用された一節で対処されている問題は、 、、またはなどのハンドル以外の読み取りメカニズムを使用すると、ARGV
の魔法を開いてトリガーすることができないことを思い出させようとしているだけです。readline
read
sysread
getc
これを実行して、それが機能することを自分自身に証明します。
sub mycat {
my $fh = shift;
print "$ARGV $.: $_" while <$fh>;
}
mycat(*ARGV);
それをファイルに入れて、いくつかのファイル引数を指定して実行します。
% perl mycat ./mycat //`pwd`/mycat ~/mycat
./mycat 1: sub mycat {
./mycat 2: my $fh = shift;
./mycat 3: print "$ARGV $.: $_" while <$fh>;
./mycat 4: }
./mycat 5: mycat(*ARGV);
///home/tchrist/mycat 6: sub mycat {
///home/tchrist/mycat 7: my $fh = shift;
///home/tchrist/mycat 8: print "$ARGV $.: $_" while <$fh>;
///home/tchrist/mycat 9: }
///home/tchrist/mycat 10: mycat(*ARGV);
/home/tchrist/mycat 11: sub mycat {
/home/tchrist/mycat 12: my $fh = shift;
/home/tchrist/mycat 13: print "$ARGV $.: $_" while <$fh>;
/home/tchrist/mycat 14: }
/home/tchrist/mycat 15: mycat(*ARGV);
見る?それは正常に動作します。