Wie kann ich eine Zeile mit mehreren Zeilen Zeile für Zeile in Perl verarbeiten?

7

Ich versuche, den richtigen PBP-genehmigten Weg zu finden, um eine Mehrfachleitung nacheinander zu verarbeiten. Viele Perl-Codierer schlagen vor, die mehrzeilige Zeichenfolge als Dateihandle zu behandeln, was gut funktioniert, wenn Sie in Ihrem Skript nicht "use strict" verwenden. Dann erhalten Sie vom Compiler eine Warnung, dass eine Zeichenkette nicht als Symbol verwendet werden darf, während strenge Referenzen verwendet werden.

Hier ist ein einfaches Arbeitsbeispiel für das Problem:

%Vor%

Beachten Sie, dass die Zeile "use strict" auskommentiert ist. Wenn ich dieses Skript ohne Verwendung von strict ausführen, bekomme ich, was ich will und erwarte:

%Vor%

Hier ist das Problem. Wenn ich die Zeile "use strict" auskommentiere, bekomme ich die folgende Warnung oder einen Fehler von Perl:

%Vor%

Zeile 8 ist das "open $ ResultsHandle, & lt; ', \ $ return;" Linie, nebenbei bemerkt. Da Perl Best Practices mich dazu zwingen, strict zu verwenden, wie erwartet PBP, dass ich eine Multiline-Zeichenkette Zeile für Zeile verarbeite? Irgendwelche Vorschläge von der SO-Community?

Danke!

    
Kurt W. Leucht 18.09.2009, 15:53
quelle

7 Antworten

11

Initiiere $ResultsHandle nicht:

%Vor%

Wenn Sie $ResultsHandle undefined vor dem open() belassen, wird es mit einem Verweis auf das Datei-Handle ausgefüllt. Weil Sie es auf eine Zeichenkette setzen, geht open() davon aus, dass es stattdessen eine symbolische Referenz auf eine Variable sein sollte --- nicht erlaubt unter use strict .

    
dave4420 18.09.2009, 16:03
quelle
7

Der prägnantere PBP-Weg besteht darin, wie folgt zu öffnen :

%Vor%

Dadurch entfällt das frühere "my $ ResultsHandle"; Deklaration und vermeidet die strikte Warnung, die Sie kennengelernt haben.

    
draegtun 18.09.2009 16:15
quelle
4

Sie können auch einen regulären Ausdruck als Iterator verwenden:

%Vor%

Dies ist etwas weniger verschachtelt im Vergleich zur Verwendung eines Dateihandles, das eine Zeichenfolge darstellt.

    
jrockway 18.09.2009 17:00
quelle
3

Konvertieren Sie die mehrzeilige Zeichenfolge in eine Liste von Einzelleitungsstrings mit split :

%Vor%     
mob 18.09.2009 15:57
quelle
2

Ändern

%Vor%

bis

%Vor%     
moonshadow 18.09.2009 16:02
quelle
0

Öffnen Sie ein Dateihandle mit einer Pipe aus dem Befehl "dir".

z.

%Vor%     
DVK 18.09.2009 16:00
quelle
0

Besseres Ergebnis mit Split kann gemacht werden durch:

%Vor%     
Znik 08.12.2016 09:33
quelle

Tags und Links