2010-10-25 41 views
2

我有一個看的Slurp源,我很想了解如何做slurp()工作:Perl的Slurp模塊是如何工作的?

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

哪裏文件連開?

+0

相關http://stackoverflow.com/q/206661/100754和http://stackoverflow.com/questions/2213485/how-do-i -read-a-files-contents-into-a-perl-scalar我看不到任何理由使用這個模塊。 – 2010-10-25 11:06:44

回答

6
+0

請注意,File :: Slurp現在被認爲是破壞的,因爲它不知道如何處理編碼,而且速度很慢。參見http://blogs.perl.org/users/leon_timmermans/2013/05/why-you-dont-need-fileslurp.html – 2014-09-19 23:30:02

+0

@briandfoy我已經長大了很喜歡[Path :: Class](https:// metacpan.org/pod/Path::Class)並改變我的建議以反映這一點。 – 2014-09-21 01:44:18

5

ARGV是一個句柄,該文件已被隱式打開。

1

這段代碼將文件名放入@ARGVARGV文件句柄隱式地打開它在@ARGV中看到的文件。這與我們在鑽石運算符<>中看不到的文件句柄相同,因爲它是該運算符的默認文件句柄。

這是相同的Perl習慣用法爲:

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