Das Ganze hat mit dem Konzept der Namensräume zu tun und mit dem grundlegenden Programmablauf. Dein "Hauptscript" eröffnet einen solchen Namensraum ("main"), in dem dann auch die vom Hauptscript verwendeten Variablen gehalten werden. An der Stelle, an der du "require" notierst, wird aber dieser Namensraum verlassen, da ja jetzt ein völlig neues Script abgearbeitet wird. Das hat (meist) einen anderen Namensraum und bekommt so gut wie gar nichts "übergeben". Es ist ein eigenständiges Programm, was abgearbeitet wird, und sobald alles erledigt ist, kehrt der Perl-Interpreter wieder zum Hauptscript zurück, also auch an die Stelle, an der ihm der vom Hauptscript eröffnete Namensraum zur Verfügung steht. Damit gilt auch keine Variable mehr, die in dem eingebundenen Script eventuell mit Werten befüllt wurde.
Das stimmt nicht (da irrt auch selfhtml). Beide Dateien haben den Namensraum main, allerdings wird durch my die Reichweite der einen Variabel auf den Block bzw. hier auf die Datei begrenzt. http://perldoc.perl.org/functions/my.html
Zwar ist our eine kluge Wahl (gegenüber dem veraltenden Pragma "vars"). behebt aber dein Problem nicht.
wieso nicht?
Ich verfechte ganz gern die Ansicht, daß man anstelle von "require" heute lieber use einsetzen sollte.
Das ist Quatsch use und require hat nichts mit heutzutage zu tun bei haben ihre speziellen Aufgabenbereiche. Es ist durchaus üblich zur Laufzeit Module mit require einzubinden.
Der Vorteil für deinen Programmablauf besteht darin, daß Module sofort kompiliert werden und alles, was in ihnen definiert ist, für den Rest der Script-Laufzeit zur Verfügung steht. Wenn du für eine Perl-Applikation also eine Menge Variablen brauchst, ist es sinnvoll, die in einem Modul zu definieren. Wird das dann mit "use" ins Hauptscript übernommen, stehen sie zur Verfügung, und du ersparst dir weitere Deklarationen.
Nicht ohne Exporter
....Man kann allenfalls empfehlen, für ein mit "require" eingebundenes Script nur sehr einfache Aufgaben (beispielsweise die Abarbeitung von HERE-Dokumenten) ohne allzuviele Variablen vorzusehen oder besser noch ganz darauf zu verzichten und die gewünschte Perl-Applikation gleich aus mehreren eigenen Modulen zusammenzusetzen.
Ob require oder use spielt im zusammenhang mit Modulen keine Rolle
Struppi.
Javascript ist toll (Perl auch!)