Как работает модуль Perl's Slurp? - PullRequest
2 голосов
/ 25 октября 2010

Я посмотрел на источник Slurp , и мне хотелось бы понять, как работает slurp():

sub slurp { 
    local( $/, @ARGV ) = ( wantarray ? $/ : undef, @_ ); 
    return <ARGV>;
}

Где файл даже открыт?

Ответы [ 3 ]

6 голосов
/ 25 октября 2010
5 голосов
/ 25 октября 2010

ARGV - дескриптор, файл был открыт неявно.

1 голос
/ 26 октября 2010

Этот фрагмент помещает имя файла в @ARGV.Файловый дескриптор ARGV неявно открывает файлы, которые он видит в @ARGV.Это тот же дескриптор файла, который мы не видим в операторе diamond <>, поскольку это дескриптор файла по умолчанию для этого оператора.

Это та же идиома Perl, что и:

 my $data = do { local( @ARGV, $/ ) = $file; <> };
...