Schrift
[thread]5744[/thread]

...did not return a true value: Wann und wann nicht?



<< >> 8 Einträge, 1 Seite
betterworld
 2003-09-22 22:48
#54792 #54792
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Bekanntlich muss am Ende jeder Datei, die mit "use" oder "require" ein wahrer Wert zurueckgegeben werden. Mir ist es allerdings schon oefter vorgekommen, dass ich dies vergass und das Programm trotzdem einwandfrei lief. Allerdings ist dies nicht immer der Fall. Und wenn ich dann irgendwann irgendwo im Programm etwas veraendere, beschwert sich Perl ploetzlich, dass kein wahrer Wert zurueckgegeben wird, obwohl es das vorher nicht tat.

Weiss irgendwer, ob dieses Verhalten willkuerlich ist oder irgendwelchen Gesetzmaessigkeiten gehorcht? Sprich: Wann ist es egal und wann nicht?
schmeckzilla
 2003-09-22 23:02
#54793 #54793
User since
2003-09-09
23 Artikel
BenutzerIn
[default_avatar]
Mal geraten!

Der Rückgabewert bei sub ist, wenn er nicht explizit angegeben worden ist, immer das Ergebnis der zuletzt ausgeführten Anweisung.

So könnte das bei Modulen auch sein. Wenn Du am Anfang Glück hattest und dabei immer etwas Wahres rauskam, hast Du vielleicht später etwas verändert, dass das ganze als falsch rauskam.

Also am besten immer mit 1; enden lassen.
use strict; use warnings;
perl -e 'eval reverse q| )51,1-,4,9,1,1-,7,22,5,8,8,3-,86-,71,51,1,51,86-,21,1,41,8,86-,24-,55-,95-(})001+_$(rhc{pam esrever tnirp|'
Crian
 2003-09-22 23:08
#54794 #54794
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Das würde ich auch vermuten.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
format_c
 2003-09-22 23:23
#54795 #54795
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wenn du mit z.B. einen Code einbindest wie
Code: (dl )
1
2
3
sub hello {
print "Hello World\n";
}


Wird dieser nicht funktionieren weil require respektive use keinen wahren Werte zuückgegeben bekommt.
Warum?
Weil sub's nur explizit aufgerufen werden können.

wobei der nur der Code
Code: (dl )
print "Hello World\n";


als mit require eingebundener Code wird funktionieren.

Da print Irgendwas normalerweise 1 zurückgibt. Naja und in diesem Zuge wurde das Hello World auch gleich ausgegeben.

Gruß Alex
betterworld
 2003-09-23 23:34
#54796 #54796
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich weiss allerdings sicher, dass es auch Faelle gab, wo "require" funktioniert hat, obwohl das letzte in der requireten Datei eben solch eine sub-Definition war. Falls mir mal wieder so etwas auftaucht, werde ich es mal posten. Das ist wie Magie.
havi
 2003-09-23 23:37
#54797 #54797
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Na dann such mal fleißig :)
betterworld
 2003-09-23 23:46
#54798 #54798
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich hatte gerade solch eine Datei gefunden und wollte sie verzweifelt posten, aber ich glaube, ich habe jetzt des Raetsels Loesung gefunden: Es ist zwar so, wie schmeckzilla sagt, jedoch mit einer kleinen zusaetzlichen Feinheit. Es kommt wirklich auf den letzten Ausdruck in der Datei an -- sub-Definitionen werden dabei ignoriert. Folgendes darf man also requiren:
--
my $foo=1;
sub dummy{
print "Hello World";
}
--
aber die erste Zeile darf nicht weggelassen werden.
betterworld
 2003-09-23 23:47
#54799 #54799
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=havi,23.09.2003, 21:37]Na dann such mal fleißig :)[/quote]
Die Suche war zum Glueck nicht lang, havi :-p
<< >> 8 Einträge, 1 Seite



View all threads created 2003-09-22 22:48.