Ed X: Was passiert bei diesem fehlehftem Substitutionsbefehl?

Hi Folks,

ein kleines perl (Verständnisproblem)Problem!

Etwas Quellcode:

<-------- schnipp --------------->
#!c:/perl/bin/perl.exe -w

$text = 'Ein kleiner Testtext natuerlich nur zum testen.';

#print "Content-type: text/html\n\n";
#print "<html>\n<head>\n<title>Ein Titelchen</title>\n</head>\n<body>\n";
print "$text\n<br>\n";

($ausgabe=$text) =~ s/testen/Testen/;    #wie wir wissen wird "das Testen" groß geschrieben
    print "$ausgabe\n<br>\n";

($ausgabe=$text) = ~ s/testen/Testen/;     # hä, bitte?  Was?
    print "$ausgabe\n<br>\n";

print "</body></html>\n";
<-------- schnapp --------------->

Die Substitutionsanweisung mit einem space zwischen dem Matcher und dem Gleichheitszeichen bewirkt die Fehlerausgabe:"Use of uninitialized value in substitution (s///) at F:\webs\cgi-bin\testprog.pl line 13.", Soweit, So gut, So richtig bzw. falsch.

Außerdem wird noch eine Zahl ausgegeben: 4294967295
Trotz längerem Nachgrübelns bin ich nicht dahintergestiegen, was sie bedeutet.

Also: "Was will mir Perl damit sagen?" bzw. was bedeutet diese Zahl?

Bye Ed X

  1. Moin,

    ($ausgabe=$text) =~ s/testen/Testen/;    #wie wir wissen wird "das Testen" groß geschrieben
    ($ausgabe=$text) = ~ s/testen/Testen/;     # hä, bitte?  Was?

    "Use of uninitialized value in substitution (s///) at F:\webs\cgi-bin\testprog.pl line 13.",

    $_ ist undefiniert.

    Außerdem wird noch eine Zahl ausgegeben: 4294967295

    = -1 als (unsigned) LongInt

    Also: "Was will mir Perl damit sagen?" bzw. was bedeutet diese Zahl?

    =~ ist nicht gleich = ~

    =~ ist der Bindungsoperator
    = ~ sind ein gleichheitszeichen und ein binaeres NOT.

    was passiert also?

    s/testen/Testen/ versucht, da es "ungebunden" ist, $_ zu bearbeiten.
    $_ ist aber undef und so kommt die Fehlermeldung zustande.
    Rückgabewert von s/// ist die Anzahl der durchgefuehrten Substiutionen, hier 0 (null).
    Binär negiert ist das =-1, bzw. 0xFFFFFFFF.

    empfehlenswerte Lektuere:

    perldoc perlop
    perldoc perlre

    Viele Gruesse,

    n.d.p.