Я посмотрел на источник Slurp, и я хотел бы, чтобы понять, как делает slurp()
работу:Как работает модуль Slurp Perl?
sub slurp {
local($/, @ARGV) = (wantarray ? $/ : undef, @_);
return <ARGV>;
}
Где файл даже открыт?
Я посмотрел на источник Slurp, и я хотел бы, чтобы понять, как делает slurp()
работу:Как работает модуль Slurp Perl?
sub slurp {
local($/, @ARGV) = (wantarray ? $/ : undef, @_);
return <ARGV>;
}
Где файл даже открыт?
См. ARGV
и $/
в perldoc perlvar.
См. Также Path::Class:File::slurp.
Обратите внимание, что File :: Slurp теперь считается сломанным, так как он не знает, что делать с кодировками, и он медленный. См. Http://blogs.perl.org/users/leon_timmermans/2013/05/why-you-dont-need-fileslurp.html –
@briandfoy Я очень любил [Path :: Class] (https: // metacpan.org/pod/Path::Class) и изменил мою рекомендацию, чтобы отразить это. –
ARGV
- это ручка, файл был открыт неявно.
Этот фрагмент помещает имя файла в @ARGV
. Файл дескриптора ARGV
неявно открывает файлы, которые он видит в @ARGV
. Это тот же дескриптор файла, который мы не видим в алмазном операторе <>
, так как это стандартный дескриптор файла для этого оператора.
Это же Perl идиома как:
my $data = do { local(@ARGV, $/) = $file; <> };
Связанные http://stackoverflow.com/q/206661/100754 и http://stackoverflow.com/questions/2213485/how-do-i -read-a-files-contents-in-perl-scalar Я не вижу причин использовать этот модуль. –