Thread Variable _ ? (52 answers)
Opened by bianca at 2020-12-25 10:24

haj
 2020-12-29 11:42
#193054 #193054
User since
2015-01-07
540 articles
BenutzerIn

user image
2020-12-28T23:37:48 Crian
Ich hab schon lange nichts mehr aktiv mit Perl programmiert, ...
Ähm ja, der Link auf Deine Perl-Seite gibt dafür einige Indizien :)

2020-12-28T23:37:48 Crian
aber damals hab ich mir für mich aus irgendeinem Grund gemerkt, use zu benutzen und nicht require.

Das klingt danach, als wäre das bei dir eine riesige Umstellung und würde wohl auch gar nicht das Problem beheben, aber hat jemand die ganzen Unterschiede dessen parat?

Das ist einfach zu erklären: Ein use Module ist gleichbedeutend mit:
Code (perl): (dl )
BEGIN { require Module; Module->import; }

  • Es wird sofort ausgeführt, bevor die darauffolgende Zeile geparst wird.
  • Die Symbole, die Module exportiert, werden in den eigenen Namensraum importiert.
  • Mit use module LIST; kann man die importierten Symbole selbst bestimmen, die Liste wird an die import-Routine weitergegeben.

Bei use bekommt man also Syntaxprobleme oder auch fehlende Module gleich beim Start um die Ohren gehauen und nicht erst, wenn der entsprechende Code durchlaufen wird.

Die Verwendung von require halte ich nur in Sonderfällen für sinnvoll:
  • Wenn ein Programm je nach Input ganz verschiedene Pfade durchläuft, die ganz unterschiedliche Module benötigen und die Dauer der Übersetzung der Module ein Problem darstellt: Deswegen findet man das in "älteren" CGI-Programmen ohne persisenten Perl-Interpreter. Die laden dann für jeden Request nur die für diesen Request nötigen Module und sterben nach der Abarbeitung.
  • Bei require kann man, anders als bei use, auch Variablen oder Dateinamen angeben, dann aber mit / anstelle von :: als Verzeichnis-Trenner.

View full thread Variable _ ?