Question: Soll true am Ende von Perl-Modulen unnötig werden | |
11 voter(s) so far |
QuoteWarum muss ein Perl-Modul immer noch true am Ende ausgeben?
2014-09-06T10:09:39 rostiDer Compiler kann das auch ohne ein True am Ende, sonst ging es doch beim Main auch nicht.Damit der Compiler feststellen kann, ob die darüber notierte Codesource fehlerfrei kompiliert werden konnte.
2014-09-06T10:09:39 rostiBestreite ich nicht, das sowas praktisch ist.In Dateien, die mit require eingebunden werden, macht es jedoch schon Sinn, eine Referenz oder einen Typeglob zurückzugeben
QuoteAber mit require Objekte erzeugen mag zwar perlish sein, aber ist m. E. nicht unbedingt moderner Stil, eher Perl-Geekism.
2014-09-06T10:09:39 rostiuse liefert nur den wahren Wert der letzten Anweisung, gewöhnlich ist da 1; notiert,
1
2
3
4
5
6
7
$ perl -wE'my $x = use CGI'
"use" not allowed in expression at -e line 1, near "= "
syntax error at -e line 1, near "= use CGI
"
Execution of -e aborted due to compilation errors.
$ perl -wE'my $x = eval "use CGI"; say $x'
Use of uninitialized value $x in say at -e line 1.
Quoteliegt wohl auch in der natur von "use"
use Datei;
QuoteWoher hast Du den Gedanken, dass use() einen Rückgabewert hat, liefert oder liefern muss?
my $coderef = require Module;
2014-09-06T17:21:13 rostiUm auf die ursprüngliche Frage zurückzukommen: Im Fall use passt obenstehende Logik schon, was die 1; am Ende betrifft, denkbar ist es aber auch, dass die Funktion use selbst den wahren Wert liefert, damit eine Anweisung use Datei; und deren Kompilierung als erfolgreich gewertet wird.
Quotewie ich schon schrieb, $x = use Foo ist ein syntaxfehler.
use Datei;
QuoteBEGIN-block ist keine funktion und hat keinen rückgabewert.
2014-09-07T19:45:27 MuffiDiesen Rückgabewerthack hast du damals schon gepostet und ich fands damals schon grässlich
*foo = sub{};
2014-09-09T20:04:18 rostispricht überhaupt nichts dagegen, den Rückgabewert von require zu nutzen und schon sind wir bei den schlimmeren Sachen die da draußen wirklich gräßlich auf der Strecke bleiben ;)
QuoteAndernfalls ist es doch eher Voodoo und niemand rechnet damit und daher ist es sehr fehleranziehend.
my $config = require MyConfig;
2014-09-14T06:51:26 rostiIn Teamarbeit ist es wichtig, dass Einer, der den Code liest, erkennen kann, was sich der Andere dabei gedacht hat.
2014-09-14T06:51:26 rostiDass Kollegen dann bei sowas mitdenken sollen. Optisch zu sehen, Oh weh!In Teamarbeit ist es wichtig, dass Einer, der den Code liest, erkennen kann, was sich der Andere dabei gedacht hat. Wenn Rückgabewerte von Funktionen genutzt werden, ist das der Fall und kein Voodoo, da ist OPTISCH zu sehen, wo die Variable herkommt, wann sie einen Wert bekommt und das kann mit den Möglichkeiten einer IDE oder einer anderweitigen Suchfunktion zurückverfolgt werden ohne dass die Zeit wegläuft.
2014-09-14T06:51:26 rostiCode (perl): (dl )my $config = require MyConfig;
drückt rein optisch in einer einzigen Zeile so ziemlich eindeutig aus, was da gemacht wird. Sicher geht das auch mit mehreren Zeilen genauso verständlich, aber wenn $config einmal im Scope liegt, wird wohl in beiden Fällen keiner auf die Idee kommen, die Config ein zweites Mal laden zu müssen.
Quoteaber ich würde mir niemals anmaßen, einen ehemaligen Kollegen als "Schlaubi" zu bezeichnen
2014-09-10T11:33:12 rostiOK, wenn deine Ideen unwichtig sind, ist das dein Problem.So wichtig ist das nun auch wieder nicht.
QuoteWissen teilen? Davon hältst du nichts?
print "irgendwas\n";
say "irgendwas";