Thread join (//, @buffer): join mit // hängt von Matching ab (16 answers)
Opened by El Ron at 2007-02-07 10:35

sid burn
 2007-02-08 17:10
#74108 #74108
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Code: (dl )
1
2
3
4
5
my $dummy = "Y";
my @buffer = qw(a b c d);

$dummy =~ /Y/i;
print join(//,@buffer),"\n";


Du lässt $dummy gegen Y matchen. $dummy matcht also erfolgreich. // ist also jetzt auf die Regex /Y/i gesetzt.

Dein join ausgeschrieben bedeutet folgendes:

Code: (dl )
join( $_ =~ m/Y/i, @buffer)


$_ ist bei dir nicht gesetzt. Es matcht also nie. Der Rückgabewert des Matches ist undef. Dieses undef wird nun benutzt als Kleber um die Werte zusammen zu fügen.

Hättest du z.B. vorher $_ auf 'Y' gesetzt, dann würde es matchen und der Rückgabewert ist wahr (1). Dieser Wert wird dann als Kleber benutzt.




Code: (dl )
1
2
3
4
5
my $dummy = "Y";
my @buffer = qw(a b c d);

$dummy =~ /N/i;
print join(//,@buffer),"\n";


Naja hier das gleiche in Grün.
Allerdiengs matcht jetzt $dummy nicht auf =~ /N/i;
Das hat zur Folge das // eine Leere Regex bleibt.

Dein join ausgeschrieben bedeutet wieder folgendes:
Code: (dl )
join( $_ =~ //, @buffer)


Da du noch keine gematchte Regex hast, hast du hier eine Leere Regex drin stehen. Eine Leere Regex matcht ebenfalls auf einen Leeren String. $_ ist ja noch Leer bei dir.

Die Regex ist also wahr und gibt 1 als Wert zurück. Dieses wird nun wiederrum als Kleber benutzt.



War doch einfach.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread join (//, @buffer): join mit // hängt von Matching ab