Значение 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, переменная по-прежнему содержит имя файла.

Другие вопросы по тегам