Значение Perl ARGV в скалярном контексте
Учитывая следующий Perl-скрипт:
# USAGE: ./flurp -x -vf file1 file2 file3 file4
# e.
$a = shift;
$b = shift;
$c = shift;
@d = <>;
# ei. value of $b = -vf
# eii. value of @d = content of file2, file3, file4
print "$b\n";
print "@d\n";
print "$ARGV\n";
Это вывод:
-vf
{contents of file2, file3, file4}
file4
Я озадачен выходом print "$ARGV\n"
, Если я попытаюсь сделать print "$ARGV[-1]\n"
пустая строка выводится на STDOUT. Если я прямо ссылаюсь $ARG[2]
Я тоже получаю пустую строку.
Почему скрипт печати file4
когда $ARGV
используется?
В качестве контрпримера я попробовал print "$d\n"
, ожидая получить последнюю строчку file4
, Вместо ожидаемого вывода я получил пустую строку. Как $ARGV
Работа?
1 ответ
Решение
В ответ на ваш конкретный вопрос: "Как работает $ARGV?"
$ARGV Содержит имя текущего файла при чтении из <> .
из переменных, связанных с файловыми дескрипторами в документах Perl.
Хотя в точке вы печатаете $ARGV
вы закончили чтение из file4, переменная по-прежнему содержит имя файла.