User since
2003-08-15
2653
Artikel
BenutzerIn
die JOINS sind ja u.A. ein Grund, warum ich alles in einer Sub brauche, denn die ganze Geschichte ist sehr sehr flexibel.
Es kann zu Joins kommen, oder aber auch nicht.
User since
2003-08-04
12209
Artikel
Admin1
Froschpopo+2007-12-28 09:44:47--
my $hashref = sub {
return int(rand(1000));
};
print $hashref->(),"\n";
print $hashref->(),"\n";
also bei mir werden da zwei verschiedene zahlen ausgegeben. vielleicht ein
bug in deiner perl-version?
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
User since
2003-08-15
2653
Artikel
BenutzerIn
nee, ich hab mittlerweile herausgefunden, dass es an den ->() lag.
Es hat ein paar Minuten gedauert bis ich verstand, dass ->() die Funktionsreferenz an Ort und Stelle, also auch schon direkt wärend der Deklarierung, ausführt.
Deshalb wurde rand() auch nur einmal ausgeführt.
my $stmt = 'something';
{
my $stmt = 'other';
}
# $stmt eq 'something'
Wenn das Codestück in dem Block noch was zurückgeben soll, dann kommt eben ein do vor den Block und ein ; hintendran, die Rückgabe kannst du dann wie von einer Funktion holen.
my $stmt = 'something';
my $res = do {
my $stmt = 'other';
return $stmt;
};
# $res eq 'other'
# $stmt eq 'something'
MfG Horst
User since
2003-08-04
14371
Artikel
ModeratorIn
Das "return" noch weg und dann passt es...
Sonst gibt's einen Fehler.
do liefert automatisch den evaluierten Wert des letzten Statements zurück...
my $res = do{ print "..."};
$res = do{ 4 + 5 };
Jo entschuldigung, war mir jetz nich ganz sicher... nächstes mal werd ichs wohl erstmal testen.
MfG Horst