Newsgroup: it.comp.lang.perl
Titolo: trailing...

cosa vuol dire questo messaggio?
"Trailing \ in regex m/\/ at 
parser.pl
 line 14, <SORG> line 335670."
grazie
-- 
Umin
n.p.: vasco rossi - dillo alla luna [stop]

 "Trailing \ in regex m/\/ at 
parser.pl
 line 14, <SORG> line 335670."
Vuol dire che ti sei dimenticato di /escapare/ il backslash (alla fine 
del pattern).
Se vuoi matchare un backslash letterale, allora devi farlo precedere da 
un altro backslash (siccome stiamo parlando di un backslash alla fine 
del pattern, esso non può essere interpretato come simbolo di escape, 
visto che non è seguito da alcun carattere).
In definitiva, se vuoi matchare un backslash (letterale), la regex è questa:
m/\\/
e *non*:
m/\/
Ma sono sicuro che lo sapevi benissimo ;-)
Presumo che la tua regex sia generata/interpolata in run-time perché, se 
l'avessi scritta nel codice, avresti avuto l'errore di *compilazione* 
"Search pattern not terminated" (senza neanche la possibilità di 
eseguire il programma).
Ciao,
Emanuele.

 Emanuele.
grazie, quando $$$ devo per la consulenza? dovro' iniziare a pagarti 
qualcosa! :D
cmq, scherzi a parte, avevo cercato in rete prima di scrivere, avevo 
trovato "trailing space" ma non avevo capito il succo del discorso e 
non avevo trovato altri post legati al perl con trailing... magari ho 
cercato male pero', insomma, non sono proprio un pivello! :P
-- 
Umin
n. p.: Richard Ashcroft - Brave New World

 m/\/
la riga e' fatta cosi':
192.17.11.63 - - [01/Oct/2005:19:48:53 +0200] "GET /robots.txt 
HTTP/1.0" 200 62 "-" "\"Mozilla/5.0 (X11; U; Linux i686;en-US; 
rv:1.2.1) Gecko/20030225\""
mentre tutte le altre fino ad ora erano fatte:
192.17.11.63 - - [01/Oct/2005:19:48:53 +0200] "GET /robots.txt 
HTTP/1.0" 200 62 "Mozilla/5.0 (X11; U; Linux i686;en-US; rv:1.2.1) 
Gecko/20030225"
(senza i "-" prima dell'agent e senza il \" prima e dopo l'agent)
io avevo scritto
$campo =~ s/\s"\-"\s"/\s"/g;   #per eliminare il "-" che mi sballa 
l'array dei campi
$campo =~ s/\\"//g; #per togliere il \"
pero' non funziona e continua a darmi quel messaggio di trailing di cui 
sopra
-- 
Umin
n. p.: Ivano Fossati - Il Talento delle Donne (Time and Silence)

> "Trailing \ in regex m/\/ at 
parser.pl
 line 14, <SORG> line 335670."
mi sono dimenticato di aggiungere che uso come separatore di riga il 
carattere "
...
-- 
Umin
n. p.: Stadio - di nessun altro

 
Allora, vedo diversi errori.
Questa regex:
 > $campo =~ s/\s"\-"\s"/\s"/g;   #per eliminare il "-"
è sbagliata, perché non puoi usare un metasimbolo come sostituzione(!)
Inoltre il metasimbolo \s io non lo userei neanche nel pattern di 
ricerca, perché nel tuo caso è troppo generale. Inoltre stai escapando 
inutilmente il carattere "-" (segno meno) che non è un metasimbolo 
(almeno, non in quel contesto).
In definitiva, questa è la regex che cerchi:
$campo =~ s/ "-"//
(della serie: perché fare le cose semplici quando le possiamo fare 
complicate? ;-)
Oppure puoi usare:
$campo =~ s/ "-" "/ "/
se proprio non ti fidi di matchare la sola stringa '"-"'.
Quest'altra regex:
 > $campo =~ s/\\"//g; #per togliere il \"
sembra invece corretta, ma anche questa la si potrebbe scrivere più 
chiaramente così:
$campo =~ s{\\"}{}g
(quando gli slash e i backslash cominciano a diventare troppi (LTS - 
leaning toothpick syndrome) è meglio usare delimitatori alternativi).
 > mi sono dimenticato di aggiungere che uso come separatore di riga il
 > carattere "
 > ...
Questa davvero non l'ho capita: usi i doppi apici come separatore di 
*riga*?!
Se è così, non ho la più pallida idea di cosa tu stia tentando di fare...!
Anche quest'altra affermazione è strana (o meglio impossibile):
 > la regexp era nel codice che ho mandato in esecuzione per un file di
 > 874000 e passa righe. Il fatto e' che e' stata invocata la prima volta
 > intorno alla 300000 esima riga quindi, mentre testavo su 1000 poi 
 >10.000 infine 100000 righe, non mi ero accorto dell'errore
Perché se l'errore si verifica in run-time, solo su una specifica riga, 
vuol dire che la regex cambia di riga in riga, e pertanto la stai 
generando (ovvero interpolando con delle variabili), per cui è 
impossibile che tu abbia una regex *letterale* nel codice (altrimenti 
avresti avuto un errore di compilazione, come ti ho già detto).
Correggi la prima regex, riconsidera *bene* il tuo separatore di riga e 
vedi se le cose si sistemano, altrimenti dovresti fornire altre 
informazioni, postando perlomeno la regex che genera l'errore (è di gran 
lunga la cosa più importante da mostrare).
Ciao,
Emanuele.

 importante da mostrare).
ok, ora ricontrollo poi in caso rigurgito qualcos'altro sul NG
grazie ancora!
(inviami pure la parcella :)
-- 
Umin
n.p.: Bryan Ferry - Roxy Music - More Than This [stop]

 (inviami pure la parcella :)
Nessuna parcella per carità, solo un po' più di attenzione nel leggere 
le mie risposte ;-)
Ciao,
Emanuele.

 risposte ;-)
hai ragione, anzi, super ragione
il problema era proprio li'!
avevo messo una var in una regexp perche'... beh, per alcuni motivi che 
mi avevano indotto a farlo
il problema e' che in questa var a volte comparivano anomalie e 
venivano interpretate come facenti parte della regexp quindi venivano 
valutati caratteri come [ ] e altro come intervalli etc
ora ho risolto, era proprio una cavolata!
grazie ancora, ciao!
