OK, so ist dies so einfach, aber für das Leben von mir kann ich nicht herausfinden, warum Sie den Code unten funktioniert nicht.Perl - Warum funktioniert diese einfache Datei nicht?
Ich versuche einfach ein CGI-Skript zu schreiben, die fortlaufend nummerierte Dateien erstellt. Ich verwende einen Zähler (in einer separaten Datei gespeichert) Spur der letzten Ordnungs Wert zu halten, und dann einen eindeutigen Dateinamen zu erzeugen mit sprintf
. Die eindeutig benannte Datei wird NICHT erstellt. Ich vermute, es ist ein Problem mit sprintf(...)
nicht korrekt $ Ordnungs auf einen Skalar Umwandlung?
Wenn ich $ordinal
von etwa zuweisen Ersetzen der Linie $ordinal = <NUMPHOTOS>;
mit $ordinal=42;
der Code funktioniert und eine Datei mit dem Namen 00000042.jpg
erstellt wird.
Was mache ich hier falsch?
Hilfe!
my ($filename, $ordinal);
local $| = 1;
print "Content-type: text/plain\n\n";
# NOTE: $ordinal is set to zero if the file doesn't exist
open (NUMPHOTOS, "<numpics.dat");
$ordinal = <NUMPHOTOS>;
print "ordinal = $ordinal";
$filename = sprintf("%08d.jpg", $ordinal);
close (NUMPHOTOS);
open (NUMPHOTOS, ">numpics.dat");
$ordinal += 1;
print NUMPHOTOS $ordinal;
close (NUMPHOTOS);
open (UPLOADFILE, ">$filename") or die "ERROR: can't open $filename: $! \n";
print "writing out file $filename...\n";
print UPLOADFILE 'hello world';
close UPLOADFILE;
Insert print „Opening $ Dateiname \ n“ stellen wollen; vor dem Öffnen (UPLOADFILE ...) Befehl, um den $ filename zu überprüfen. –
Siehe http://perldoc.perl.org/perlfaq5.html#I-still-don%27t-get-locking.--I-just-want-to-increment-the-number-in-the-file. --How-can-I-do-this% 3f –