OK, donc c'est si simple mais pour la vie de moi je ne peux pas comprendre pourquoi le code ci-dessous ne fonctionne pas. J'essaie d'écrire simplement un script CGI qui crée des fichiers numérotés séquentiellement. J'utilise un compteur (stocké dans un fichier séparé) pour suivre le dernier ordinal utilisé, puis générer un nom de fichier unique en utilisant sprintf
. Le fichier à nom unique n'est PAS créé. Je suppose que c'est un problème avec sprintf(...)
ne pas convertir correctement $ ordinale en scalaire?Perl - pourquoi ce simple fichier open request ne fonctionnera-t-il pas?
Si je cède $ordinal
par exemple en remplaçant la ligne $ordinal = <NUMPHOTOS>;
avec $ordinal=42;
le code fonctionne très bien et un fichier nommé 00000042.jpg
est créé.
Qu'est-ce que je fais mal ici?
Aide!
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;
Insérez print "Opening $ filename \ n"; avant la commande open (UPLOADFILE ...) pour vérifier le nom de fichier $. –
Voir http://perldoc.perl.org/perlfaq5.html#I-still-don%27t-get-locking.--I-juste-pour-incrémenter-le-numéro-dans-le-fichier. --How-can-I-do-this% 3f –