Thread wer hat lust auf ein Spiel?
(61 answers)
Opened by conray at 2010-02-19 20:31 2010-03-03T08:52:54 Kalle $0 enthält halt nur den Namen der Programmdatei so wie er beim Aufruf des Programmes zum Beispiel auf der Kommandozeile eingegeben wurde. Wenn das Skript aber korrekt mit dem Perlinterpreter verknüpft ist, im Pfad liegt und aus einem ganz anderen Arbeitsverzeichnis aufgerufen wird, kann es sein, dass in $0 einfach nur der Name des Skriptes steht, aber kein Pfad der relativ zum aktuellen Arbeitsverzeichnis auf das Skript zeigt. Theoretisch könnte es sogar sein, dass $0 relativ zum aktuellen Arbeitsverzeichnis interpretiert auf eine andere Datei als das Skript verweist. File::Spec->catfile($FindBin::Bin, $FindBin::Script) hingegen sollte stets ein Pfad sein, der die Skriptdatei bezeichnet, denn FindBin gibt sich einige Mühe, die Information aus $0 und $ENV{PATH} korrekt zu verarbeiten. Quote Stapeldateien unter WinDOS werden auch sequentiell eingelesen und man kann den Interpreter verwirren, wenn man sie während der Ausführung modifiziert. Quote Genau, Perl muss die ganze Skriptdatei zunächst einlesen und in eine interne Repräsentation kompilieren, bevor es sie ausführt. Wenn man später etwas am Skript ändert dürfte das also keine Auswirkungen mehr auf den ausgeführten Code haben. Quote Soweit ich weiß lockt Perl die Skriptdatei überhaupt nicht. Es schließt sie aber auch nicht sofort nachdem sie eingelesen ist, sondern erst bei Programmende. Unter WinDOS kann man Dateien, die von irgendeinem Programm geöffnet sind nicht löschen, unter Unices geht das sehr wohl. When C++ is your hammer, every problem looks like your thumb.
|