Newsgroup: it.comp.lang.perl
Titolo: AAH! Semplice, ma non troppo...

Salve a tutti,
sto sviluppando un semplice script CGI in perl.
Ho bisogno di utilizzare un comando che consenta
di eliminare il contenuto di una stringa di testo a
partire dall'ultimo segno "/".
Un esempio:
http://www.dominio.com/pages/html/main.html
dovrebbe essere trasformato in
http://www.dominio.com/pages/html/
Ciň che ho trovato finora č questo:
$url=~ s/\?.*$//;
che elimina tutti i caratteri e simboli che seguono il
punto interrogativo, incluso quest'ultimo.
(esempio:
http://www.io.it/del.cgi?boh
diventa
http://www.io.it/del.cgi
)
Qualcuno puň darmi una dritta???
Un "grazie di cuore" anticipato.

Saluti.
#
# uno slash, seguito da una sequenza di caratteri 
# non slash, ancorato a fine linea.
# 
$url= s!/[^/]*$!!; 
Se devi fare una sacco di parsing di Url, guarda i
vari moduli CGI* e HTML*.
Cheers,
	Alessandro

 wrote:
: sto sviluppando un semplice script CGI in perl.
: Ho bisogno di utilizzare un comando che consenta
: di eliminare il contenuto di una stringa di testo a
: partire dall'ultimo segno "/".
: Un esempio:
: 
http://www.dominio.com/pages/html/main.html
: dovrebbe essere trasformato in
: 
http://www.dominio.com/pages/html/
: Ciň che ho trovato finora č questo:
: $url=~ s/\?.*$//;
Il quantificatore '*' e` greedy, come si dice in gergo, cioe` avido,
e tende a catturare la stringa piu` lunga possibile:
nanux:~/tmp>perl -e '$_=<>;s/\/.*$//;print "$_\n"'
http://www.dominio.com/pages/html/main.html
http:
Per ottenere quello che vuoi tu devi usare:
nanux:~/tmp>perl -e '$_=<>;s/\/[^\/]*$//;print "$_\n"'
http://www.dominio.com/pages/html/main.html
http://www.dominio.com/pages/html
cioe` dopo il primo '/' cercare tutto cio` che non e` un '/'.
Una soluzione piu` generale la puoi trovare usando il modulo URI::URL.
: che elimina tutti i caratteri e simboli che seguono il
: punto interrogativo, incluso quest'ultimo.
: (esempio:
: 
http://www.io.it/del.cgi?boh
: diventa
: 
http://www.io.it/del.cgi
)
Piuttosto che scriverti a mano una soluzione valida solo per i CGI
con metodo GET, potresti usare uno dei moduli CGI e avresti il
vantaggio di avere la soluzione anche per il metodo POST.
Cambiando metodo all'interno della definizione della form non dovrai
cambiare una virgola nel tuo script, pensa a tutto il modulo CGI, che
si rende conto se i dati arrivano tramite GET o POST.
-- 
Nando Santagata: Telemastica & infornatica
Key fingerprint = C2 D9 C0 8E D5 B7 04 97  AF E8 3F 3E AF 4E 7F 9E
finger nando (at) ipers (dot) net   for my PGP public key

Salve,
ringrazio tutti coloro i quali si sono interessati al mio problema.
Purtroppo nessuna delle soluzioni proposte sembra funzionare
adeguatamente.
Per quanto sia riuscito a capire, mi servirebbe qualcosa tipo
questo:
$url = elimina tutto ciň che segue il carattere / esso compreso
# questo mi ritornerebbe una stringa tipo
# 
http://www.io.com/html/pages
$url = aggiungi il simbolo / al termine della stringa
# a questo punto dovrei ottenere un url del dipo
# 
http://www.io.com/html/pages/
Vi ringrazio anticipatamente per il vostro contributo.

 Salve,






Due modi possibili:
1) trovare l'indice dell'ultimo '/' con rindex e troncare la stringa li'
oppure
2) fare il reverse della stringa e cancellare con un s/// tutto quello che
viene PRIMA del primo '/'. Poi fare nuovamente il reverse.
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@tuttocitta.it
 
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

$url = elimina tutto ciň che segue il carattere / esso compreso
Non sara' in stile Perl, ma questo sembra funzionare:
$url   ="
http://www.io.com/html/pages/quellochedevotogliere
";
$url2  = substr($url, 0,rindex($url,"/")+1);
print "$url2 \n";
				ciao, f.patamia
 

 "Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)
Ehila', ciao Maurizio!
Io avevo suggerito un bel 
$url =~ s|[^/]+$||;
che cancella tutto cio' che non e' "/" alla fine della stringa, mi pare
la soluzione piu' veloce e in stile perl.
bye
silvio


(remove the expression xx...xx to reply)
Oscar BBS Bologna: (+39)-51-6251636 FirstClass
Think Different! - 
http://www.applemasters.apple.com