Thread split gibt scalar zurück. Warum? (8 answers)
Opened by lawnmover at 2011-02-18 12:19

Taulmarill
 2011-02-18 15:17
#145752 #145752
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
2011-02-18T13:22:53 lawnmover
@Taumarill seh ich das richtig das:
Code (perl): (dl )
my $lb   = () = $text =~ /(\n)/g;


den $text nach \n durchsucht und dann ein \n in (), also eine Liste geschrieben wird und da $lb = () einen Skalarenkontext hat, hat es danach die Anzahl an Zeilen?


Fast. Ich versuche das noch mal besser zu Erklären:

Der Reguläre Ausdruck $text =~ /(\n)/g;gibt eine Liste mit allen gefundenen Zeilenumbrüchen zurück. Diese wird einmal an die leere Liste () übergeben, wo sie sich nicht weiter auswirkt. Die leere Liste ist nur da, um den Regex in Listenkontext zu setzten. Der Zuweisungsoperator (also das Gleichheitszeichen) zwischen dem Regex und der Liste gibt jetzt aber die durch ihn zugewiesene Liste (die mit den Zeilenumbrüchen) selbst wieder zurück, und zwar an den Zuweisungsoperator weiter links. Dieser will die Liste einem Scalar zuweisen, weswegen die Liste plötzlich in scalarem Kontext steht und nun die Anzahl ihrer Elemente zurück gibt.

Ich habe mal ein paar Klammern gesetzt, um anzuzeigen, was zusammen gehört:
Code (perl): (dl )
my $lb = ( () = ( $text =~ /(\n)/g ) );
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B

View full thread split gibt scalar zurück. Warum?