Идите прямо и передайте *ARGV
typeglob или \*ARGV
, его ссылку. Просто убедитесь, что функция, в конечном итоге использующая ее, делает это с помощью оператора <$fh>
или readline($fh)
, ее базового функционального эквивалента.
Проблема, затронутая в процитированном отрывке из man-страницы perlvar, просто пытается напомнить вам, что вы не сможете получить ARGV
magic open для запуска, если вы используете другое чтение механизм, чем 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);
См? Работает нормально.