Thread Datein als Hex auslesen (7 answers)
Opened by Shiu at 2012-10-06 20:55

betterworld
 2012-10-07 02:02
#162529 #162529
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Guest Shiu
Code: (dl )
do { local $/; split //, $_ };


"do" ist hier keine Schleife. Sondern es dient nur dazu, einen Block zu schaffen, damit man in dem Block local benutzen kann. Mit local wird dafür gesorgt, dass $/ in diesem Block undef ist, also einzig während der Ausführung von split.

Und daher ist dieser do-Teil auch komplett unsinnig. Denn $/ wirkt sich überhaupt nicht auf die Funktion von split aus, sondern nur auf das Einlesen aus Dateien.

Jedenfalls ist der Rückgabewert des "do" eine Liste mit den einzelnen Zeichen in der Zeile. Mit "map" wird dann über diese Zeichen iteriert und jedes Mal dieser unpack-Kram gemacht.

P.S.: Es gibt durchaus auch sinnvolle Anwendungen solcher "do"-Konstrukte, nur eben nicht mit split. Man sieht öfter mal so etwas:

Code: (dl )
my $content = do { local $/; <IN> };


Damit werden alle Zeilen auf einmal aus dem Filehandle gelesen, und dabei wird nicht dauerhaft der Wert von $/ geändert. Dieses Konstukt kann man als elegant betrachten, weil es in einer Zeile geht und weil "my" außerhalb des Blocks steht, sodass die Variable länger gilt. (Und weil Perl (5) im Gegensatz zu vielen anderen Programmiersprache keine Funktion hat, um einfach so alle Zeilen aus der Datei zu lesen :) Aber man kann ja "slurp" aus Path::Class benutzen, siehe meine Signatur.)

Anders als hier sollen in Deinem Beispiel aber eben nicht alle Zeilen auf einmal gelesen werden, denn es wird ja explizit über die Zeilen iteriert. Daher ist es um so unklarer, was der Autor sich bei dem local $/ gedacht hat.
Last edited: 2012-10-07 02:32:06 +0200 (CEST)

View full thread Datein als Hex auslesen