Thread wer hat lust auf ein Spiel? (61 answers)
Opened by conray at 2010-02-19 20:31

murphy
 2010-03-03 13:11
#133986 #133986
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
2010-03-03T08:52:54 Kalle
[...]
Zumindest lese ich immer wieder, daß man FindBin benutzen solle, aber $0 kommt hier ja extrem praktisch.
Kann man sich darauf nicht verlassen ?
[...]

$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 CPAN:FindBin gibt sich einige Mühe, die Information aus $0 und $ENV{PATH} korrekt zu verarbeiten.

Quote
[Tie::File]
Gute Idee, obwohl mir an sich nicht wirklich wohl wäre, zur Laufzeit ein Programm zu verändern. Zumindest bei Stapeldateien sollte man das tunlichst vermeiden :)

Stapeldateien unter WinDOS werden auch sequentiell eingelesen und man kann den Interpreter verwirren, wenn man sie während der Ausführung modifiziert.

Quote
Bei Perl dachte ich eigentlich, daß das ganze Sourcefile erstmal eingelesen wird und verstehe daher nicht, warum das überhaupt gelocked ist.

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
Meinst du da ist vielleicht nur ein Readlock drauf, um zu vermeiden, daß es beim Einlesen plötzlich gelöscht wird und man könnte es trotzdem noch schreibend öffnen ? hmm...vielleicht hing der Lock auch mit Optiperl zusammen oder mit den Bu..ääh features von Windows.

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.

View full thread wer hat lust auf ein Spiel?