Newsgroup: it.comp.lang.perl
Titolo: domanda su get di net::ftp

nel mio script perl uso il modulo net::ftp per effettuare il download di
file da un host sulmio pc. Se devo trasferire un solo file nessun problema
, ma io volefo trasferire tutti i file che terminano per una data (es:
*20010904 ) ma al comando $ftp->get("upload/$provafile"); (dove $provafile
in questo caso e *20010904) non mi prende tutti i file che finiscono per
20010904 , quindi interpreta * come carattere facente parte del nome e non
come "ignora tutti i caratteri prima di..".
come posso fare per fargli
prendere tutti questi file ?
--------------------------------
Inviato via 
http://usenet.iol.it

 prendere tutti questi file ?
Non conosco net::ftp, ma nei client ftp "vecchio stile" (quelli senza 
interfaccia grafica, per intenderci) per trasferire piu' file 
contemporaneamente si utilizza il comando MGET che supporta le 
wild-cards * e ?.
Ciao
MjdP

MjdP
ti ringrazio per la risposta, ma senbra propio che questo modulo
non supporti mget!!
ciao
luca



potrebbe essere qualcosa del genere (se ho capito bene la data fa parte del nome del file):
# login .. ecc...
@d=$conn->ls(q|/upload/|);
$conn->get(grep{m|^.*20010904$|} @d);
mi pare ci voglia un secondo argomento per il file di destinazione,se e' cosi' puoi usare il risultato di m//
byez
Charlie
:wq

:wq
ti ringrazio per la risposta ,
effettivamente @d=$conn->ls(q|/upload/|); mette nell'array tutto quello che
c'è nella dir upload, ma è grep{m|^.*20010904$|} @d che sembra non fare
quello che deve fare (il risultato è il trasferimento di nessun file) ...
senza contare che nella get gli va passata l'intero path e non solo il nome
del file. per quanto riguarda il secondo argomento della get per il file di
destinazione si può omettere e la dir di destinazione di default è quella
dove è situato lo script
ciao     Luca


 del file. 
questo non dovrebbe essere un problema,no?
ho risposto seguendo l' istinto e non la logica...
in realta'poco elegantemente potrebbe essere
@d=$conn->ls('/upload/');
for(@d){ 
$conn->get($_) if (/^.*20010904/ );
}
 
charlie
:wq

 prendere tutti questi file ?
FTP.pm e' un modulo di funzioni di accesso ai comandi ftp a basso 
livello, *non* e' un client.
Nei client ftp classico a riga di comando esistono i comandi mput e 
mget per fare put e get con wild card, ma non sono implementati in 
FTP.pm pero' e' abbastanza banale fareseli da se
sub mget () {
        $pattern=$_[0];
 
        foreach $file (grep {$pattern} $ftp->dir()) {
                $ftp->get($file);
        }
}
dove $ftp e' l'oggetto creato con Net::FTP->new(...).
PS: A scanso di equivoci e risposte del tipo "da syntax error":
questo codice *non* e' testato, l'ho buttato giu' al volo, non 
garantisco nulla, nemmeno al correttezza sintattica, e' solo una 
possibile soluzionem un suggerimento di soluzione.
-- 
Saluti,
Giancarlo

 $conn->get(grep{m|^.*20010904$|} @d);
Direi che e' sbagliato.....
get vuole come argomenti: ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] ) 
quindi prenederebbe il primo elemento del grep come REMOTE_FILE, il 
secondo come LOCAL il terzo come WHERE e si incasionerebbe alquanto....
-- 
Saluti,
Giancarlo

 Direi che e' sbagliato.....
si, me ne sono accorto quando ho considerato che il metodo get richiede uno scalare
ma
@d=$conn->ls('/upload/');
for(@d){
$conn->get($_) if (/^.*20010904/ );
}
l'ho testato e funziona
Charlie
:wq

Charlie
cosě va
bene ...  grazie mille!!!!
Luca
