PmanX hat geschrieben:[...]
Sie sind entweder undefiniert oder mit dem Leerstring besetzt.
Beides ist FALSE und läßt sich wunderbar abfragen.
Ja, stimmt ich vergaß das es diese inkonsistente art in Perl gab.
Code: Alles auswählen
#!/usr/bin/perl
use strict;
use warnings;
my $foobar = "bin leer";
#print "$foobar\n";
$foobar =~ /<\/bar>/;
# Huch was ist den das? Wo kommt den $', $` und$& her? Nicht magisch?!
if ($' or $` or $&){
print "post: $'\n";
print "pre: $`\n";
print "this: $&\n";
} else {print "blubb";};
man kann auf die
"nicht" initialisierte Variable nicht direkt zurückgreifen, außer in einem if-statement.
Ein print $` bringt ein "Use of uninitialized value in concatenation (.) or string at foobar.pl line 11.".
Ok, sie werden nicht erzeugt sondern "initialisiert" (Was aber schon ein Widerspruch zum aufgezeigten verhalten ist).
Und sowas willst du ernsthaft in Python haben? Nein danke. Wenn du sowas brauchst bleib doch bei Perl
Ich nutze es auch oft für quick'n'dirty Scripts
Hey, schön finde ich ja das Verhalten:
Code: Alles auswählen
#!/usr/bin/perl
use strict;
use warnings;
my $foobar = "bin nicht leer </bar>";
#print "$foobar\n";
$foobar =~ /<\/bar>/;
# Huch was ist den das? Wo kommt den $', $` und$& her? Nicht magisch?!
if ($'){
print "post: $'\n";
print "pre: $`\n";
print "this: $&\n";
} else {print "blubb";};
Wunderbar, es wird mir blubb ausgegeben obwohl der match erfolgreich war. Warum? empty-string...
ok machen wir daraus ``if ($' or $' eq ''){``: Super geht doch.
Aber moment:
Code: Alles auswählen
#!/usr/bin/perl
use strict;
use warnings;
my $foobar = "bin nicht leer";
#print "$foobar\n";
$foobar =~ /<\/bar>/;
# Huch was ist den das? Wo kommt den $', $` und$& her? Nicht magisch?!
if ($' or $' eq ''){
print "post: $'\n";
print "pre: $`\n";
print "this: $&\n";
} else {print "blubb";};
Code: Alles auswählen
Use of uninitialized value in string eq at foobar.pl line 11.
Ja, stimt ja sie ist nicht "initialisiert" daher ist ein eq nicht erlaubt
Also muss man dann doch ``if ($' or $` or $&)`` wie im ersten listning nutzen damit bei einem erfolgreichen match auf jedenfall das if... ausgeführt wird.
Soll ich weiter machen? Ich Könnte den ganzen Abend von der Inkonsistenz von Perl berichten...
lg