Newsgroup: it.comp.lang.perl
Titolo: open & unlink

Ciao a tutti,
mi sto misurando su un mistero del perl.
dato questo script che serve a generare dinamicamente un grafico:
-------------------------------
#!/usr/bin/perl
use perlchartdir;
eval {
        require "../
variabili.pl
";
};
my %query = map {my($k,$v) = split(/=/)} split(/&/, $ENV{"QUERY_STRING"});
my $file = $query{'tmp_file'};
$file =~ s/\///g;
$file =~ s/^\.\.//;
unless (-e "$tmp_dir_path/$file") {
        die "Non apro $tmp_dir_path/$file\n";
};
open (DAT, "<$tmp_dir_path/$file") || die "Non posso leggere 
$query{'tmp_file'}: $!\n";
        while (<DAT>) {
                my ($dato,$mese) = split (/=/);
                push (@data, $dato);
                push (@labels, "$mese");
        }
close DAT;
my $data = [@data];
my $labels = [@labels];
# metodo per fare regolare le dimensioni del grafico sul numero di dati
my $size_X = (int ($#labels/30) + 1) * 45;
$size_X += 300 if ($size_X < 300);
my $size_x = $size_X - 70;
#Create a XYChart object of size 300 x 300 pixels
my $c = new XYChart($size_X, 400);
#Set the plotarea at (45, 30) and of size 200 x 200 pixels
$c->setPlotArea(45, 30, $size_x, 320)->setBackground(0xffffc0, 0xffffe0);
#Add a title to the chart using 12 pts Arial Bold Italic font
$c->addTitle("Traffico VP Medio Giornaliero", "arialbi.ttf", 12);
#Add a title to the y axis
$c->yAxis()->setTitle("Num. Passaggi Medio Giorno");
#Add a title to the x axis
$c->xAxis()->setTitle("Periodo", "arialbi.ttf", 12);
#Add a green (0x00ff00) 3D area chart layer using the give data
$c->addAreaLayer($data, 0x00ff00)->set3D();
#Set the x axis labels using the given labels
$c->xAxis()->setLabels($labels);
unlink "$tmp_dir_path/$file";
#output the chart in PNG format
binmode(STDOUT);
print "Content-type: image/png\n\n";
print $c->makeChart2($perlchartdir::PNG);
-----------------------------------------------
La parte di codice in questione è quella che apre il file temporaneo 
contenente i dati da inserire nel grafico con la classica "open" e quella 
che cancella il file con "unlink". Ebbene .... alcune volte, circa 1 su 3 
mi genera un errore non riuscendo a leggere il file, ma se io elimino la 
istruzione unlink non da più problemi neanche provando 50 volte.
E' come se a volte unlink precedesse la open e facesse sparire il file, so 
che non è possibile, però non riesco a capire il fenomeno.
Grazie. 
-- 
-- Marco Allegretti --
http://www.shishii.com



Un'altra stranezza... se al posto di
unlink "$tmp_dir_path/$file";
metto:
system ("rm", "$tmp_dir_path/$file");
tutto funziona. Però vorrei evitare di usare la shell poichè perdo in 
portabilità.


shishii il 18:19, venerdì 21 marzo 2003 ha scritto:
ho risolto il problema di fatto inserendo all'inizio:
$| = 1;
però continuo a non capire il fenomeno.


unlink "$tmp_dir_path/$file";
a me, personalmente cosi non piace. prova con:
unlink <$tmp_dir_path/$file>;
-- 
kill -9 them all. Let init sort them out.
Maurizio - Tannoiser - Lemmo
Founder Member of ERLUG (Emilia Romagna Linux User Group)
http://erlug.linux.it



Ciao,
ti ringrazio, il tuo suggerimento sembra avere risolto il problema,
ma spiegami il significato di <> in questo caso, ho cercato sui testi e non 
ho trovato nulla.
Ciao.


ho trovato nulla.
perldoc -f unlink, per cominciare. poi perldoc perlop (sezione I/O
Operators).
penso cmq che il tuo problema fosse legato a problemi di "globbing" del
file.
-- 
Greetings, Professor Falken.


 Operators).
ok grazie... ho consultato la documentazione che mi hai consigliato, però 
continuo a non capire qual'è l'effetto benerfico di <> rispetto a "".
