2015-05-05 16 views
8

Ich war in effiziente Möglichkeiten suchen, Dateien in Perl zu lesen und kam in dieser sehr interessanten Motto:Fancy-Datei in Perl Schlürfen

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

Meine Frage lautet: Wie genau funktioniert das? Normalerweise, wenn Sie eine Datei schlürfen, setzen Sie $/ = undef, aber ich sehe nicht, wie dies das tut. Dieses kleine Stück Code erweist sich als sehr schwierig, meinen Kopf einzuwickeln.

Was wäre eine vereinfachte Gliederung und Erklärung dafür?


Jetzt, da ich weiß, wie es funktioniert, lassen Sie uns echt schick werden!

Nicht, dass dieser Code wirklich verwendet wird; es macht einfach Spaß, es herauszufinden und cool anzuschauen. Hier ist ein Einzeiler, um mehrere Dateien gleichzeitig zu schlürfen !!!

my @texts = map { local (@ARGV, $/) = $_; <> } @files; 
+1

perl erlaubt die Zuweisung mehrerer Variablen in einer einzigen Zuweisung (weiß nicht, wie es richtig heißt): '($ a, $ b, $ c) = (1, 2)'. "$ c" würde hier enden "undef" – n0rd

+3

Das ist schrecklich. Sie müssen fragen, was es tut, also nicht duplizieren – Borodin

+1

Diese Codezeile scheint tatsächlich ein häufig verwendeter Teil des Perl-Codes zu sein. Ich habe es an mehr als einem Ort gesehen, was mich dazu gebracht hat, diese Frage zu stellen. – tjwrona1992

Antwort

10
local (@ARGV, $/) = $file; 

ist die gleiche wie

local @ARGV = ($file); 
local $/ = undef; 

<> liest dann aus Dateien in @ARGV erwähnt, das heißt von $file.

+1

Oh, das macht Sinn, dann kehrt das' do {} 'einfach zurück Wert des zuletzt ausgewerteten Ausdrucks ist der Wert von <<> oder der Inhalt der Datei. Danke @charoba! – tjwrona1992

+0

@ jwrona1992, Der Punkt von 'do' ist, den Bereich zu begrenzen, in dem '@ ARGV' und' $/'geändert werden. – ikegami