Это все в perldoc -f open
:
Если EXPR опущен, скалярная переменная с тем же именем, что и FILEHANDLE, содержит имя файла.(Обратите внимание, что лексические переменные - объявленные с «my» - не будут работать для этой цели; поэтому, если вы используете «my», укажите EXPR в своем вызове open.)
Обратите внимание, что это не очень хороший способ указать имя файла.Как вы можете видеть, он жестко ограничен типом переменной, в которой он находится, и обычно рекомендуется избегать либо глобальной переменной, которую он требует, либо глобального дескриптора файла, который он открывает.
Использование лексического дескриптора файла позволяет контролировать область его действия.и обрабатывает закрытие автоматически:
open my $fh, '<', "filename" or die "string involving $!";
И если вы берете это имя файла из командной строки, вы можете покончить с этим open
или любым другим дескриптором в целом, и использовать обычный <>
оператор для чтения из аргументов командной строки или STDIN.(подробности см. в комментариях)