Newsgroup: it.comp.lang.perl
Titolo: passare un hash ad una subroutine?Cancellare un file?

Salve,
ho un problema:
questo non mi funziona,
................
my(%record)=&parse_form;# la sub parse_form restituisce un hash con tutte le
coppie nome-valore
#fino a qui tutto funziona
$riga=&creariga(%record);
#%record non arriva alla sub creariga
COME SI FA????
Altro problema:
voglio spostare da una cartella ad un altra tutti i file che corrispondono
ad una determinata richiesta del mio programma.
Per adesso sono riuscito a copiare il file (while(<file_da_copiare>){print
file_nuovo;})...ma come faccio a cancellare il file vecchio una volta che è
stato copiato?
Spero che qualcuno mi aiuti,
a presto,
daniele

 stato copiato?
unlink
-- 
Oramai che i baci tuoi piu` non mi sazian
cerchero` un'altra donna dentro ai sogni di Tarzan...

 stato copiato?
Potrebbe non servirti.
Se le due cartelle stanno sullo stesso filesystem (forse su certi sistemi -
ma non so quali - anche se stanno su filesystems diversi) puoi usare
'rename'
In questo modo ottieni anche il non banale vantaggio di mantenere uid, gid e
privilegi di accesso ai file.
perldoc -f rename dice:
       rename OLDNAME,NEWNAME
               Changes the name of a file; an existing file
               NEWNAME will be clobbered.  Returns true for
               success, false otherwise.
               Behavior of this function varies wildly depending
               on your system implementation.  For example, it
               will usually not work across file system
               boundaries, even though the system mv command
               sometimes compensates for this.  Other
               restrictions include whether it works on
               directories, open files, or pre-existing files.
               Check the perlport manpage and either the
               rename(2) manpage or equivalent system
               documentation for details.
Per evitare sorprese OLDNAME e NEWNAME e' bene che siano path completi.
ciao, marco
--
Marco Cacchiani                                
e-mail:ma...@sirius.pisa.it
Public pgp key:         
http://www.sirius.pisa.it/marco/pgp_public_key.asc
Sirius Servizi Informatici                     e-mail: 
in...@sirius.pisa.it
Parco Teatro Pasolini, 1                       Phone:  +39 (50) 865120
I-56019 - Vecchiano                            Fax:    +39 (50) 860260
(Pisa - ITALIA)                                
http://www.sirius.pisa.it/

GRAZIE, grazie a tutti degli utilissimi consigli!!!

 Cosa intendi? °_°
Che ad un hash posso assegnare un vettore e leggera` le chiavi negli
elementi pari (0, 2, 4, ...) ed i rispettivi valori negli elementi
dispari (1, 3, 5, ....). Che poi sia trattato diversamente e` pacifico,
ma non credo che si possa passare in questo modo:
myfunc(%Hash, $scalar);
...
sub myfunc {
  %myhash = shift;
Non ho mai provato, ma "a pelle" mi sa di errore.
Piuttosto farei cosi`:
myfunc($scalar,%Hash);
...
sub myfunc {
  my($myscalar, %myhash) = @_;
Se poi qualcuno ha di che correggermi... benvenga :)


 Ora per sapere come tratto la reference che ricevo... RTFM :)
Io lo so... tu lo sai... lo diciamo?
sub func(
    ($hash, $scalar) = @_;
    print $$hash{'1'};
    %hashpuro = %$hash;
    print $hashpuro{'1'};
    .....
}
--
Valerio Granato - 
val...@grana.to
FOR KeyMaster - i2000 Usenet Hierarchy
Maggiori informazioni sulla gerarchia i2000?
http://www.i2000.usenet.it
 - 
in...@i2000.usenet.it

  ma significa farsi del male.
Squalificato. Utilizzo di arma impropria.


 regolo se devo passare due vettori come parametro?
IMHO può essere interessante leggere il sorgente di DBI e di CGI.
Entrambi fanno un bel po' di casino con le reference, che poi penso
sia quello che ti interessa.


   my($myscalar, %myhash) = @_;
Niente da fare... sempre stesso risultato:
pippo
1
a
2
b
Se invece passi il riferimento all'hash tutto funziona.
Mi sa che però ho dimenticato l'origine del discorso, quindi fa niente
:-)
Ciao,
Valerio

 Da' come risultato
And here it doesn't rain ;)


 questo modo, my(%myhash,$myscalar) ?
Se invece fai func(\%myhash, $myscalar) il problema non c'è :-)


 Se invece fai func(\%myhash, $myscalar) il problema non c'č :-)
Giusto, passi una reference.
Ora per sapere come tratto la reference che ricevo... RTFM :)
Ty


 questo modo, my(%myhash,$myscalar) ?
  sub func {
    my $scalar = pop;
    my %hash = @_;
 
   }
 
 ma significa farsi del male.
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

  ma significa farsi del male.
Appunto... Il problema misi era presentato quando dovevo passare ad una
sub piu` di un vettore o un mix di scalari e vettore.
In genere metto gli scalari prima e il vettore in fondo, ma come mi
regolo se devo passare due vettori come parametro?


 devo passare due vettori come parametro?
<code>
	sub foo {
		my ($ref_array_1,$ref_array_2);
		$ref_array_1=shift;
		$ref_array_2=shift;
		my (@array_1,@array_2);
		@array_1=@$ref_array_1;
		@array_2=@$ref_array_2;
		# your stuff here
	}
</code>
	$ perldoc perlref
  ;)
	Alla prossima,
		Marco

 regolo se devo passare due vettori come parametro?
Devi passare i reference. E' il prezzo da pagare alla versatilita' 
di Perl nel passaggio di parametri alle funzioni.


   $ perldoc perlref
Sarebbe stato il mio prossimo passo, ovviamente ;)
