Newsgroup: it.comp.lang.perl
Titolo: RegExp.. salvatemi dalla pazzia!

for $_ (@log) {
if ($_ ne /-\s-/ and $_ ne /\/pm\// or $_ ne...) {push (@dep,$_)}
}
(questo codice naturalmente (purtroppo) non funziona, ma è la base di partenza)
cioè per ogni elemento dell'array log (ogni riga del logfile) SE la riga:
non contiene "- -" ma nemmeno o /pm/ o ... (altre condizioni come pm)
ALLORA mettimele nell'array @dep..
e se dovessi dirgli anche:
deve contenere la riga /pippo/ ??
ho dovuto dividere le reg exp perchè le righe del log sono abbastanza lunghe
e diventavo matto a pensarne la struttura.. perchè già che ci siamo, il classico
* del dos qui dovrebbe diventare . (per qualsiasi carattere) e * (da 0 a infinite
volte) giusto?
comunque, ripeto, non è questo il caso perchè i filtri tipo /pm/ sono alternativi:
o escludol'uno o il sucessivo e quindi comunque dovrei moltiplicare le regexp.
Vi prego aiutatemi perchè sto impazzendo..
--
Ciao
The Bos
the-bos#
axelweb.com
http://the-bos.axelweb.com

 }
  Le espressioni regolari sono un tipo indipendente, hanno come formato
letterale quello da te indicato ma a loro non sono applicabili, nello
specifico, gli operatori relativi alle stringhe. 
  Un operatore definito sull'insieme prodotto cartesiano delle stringhe
e delle espressioni regolari, invece, e` il /bind/:
	$string=~/regular_expression/
  Questa espressione e` vera se esiste un /matching/ tra la stringa e
l'espressione regolare, falsa altrimenti, piu` una serie di utili /side/
/effect/. 
  Un secondo operatore, del tutto simile, e` il /bind/ negato:
	$string!~/regular_expression/
il cui comportamento e` facilmente intuibile.
  Al proposito, consiglio *vivamente*:
	$ perldoc perlre
	Alla prossima,
		Marco

quindi nel mio caso sarebbe giusto scrivere un
if ($_ !~ /-\s-/ and $_ !~ /\/pm\// or $_ !~ .....) {baubau}
???
o se no come ne vado fuori? (intendo dall'if subordinato a più
di una condizione.. e soprattutto con la seconda e la terza del tipo "or").


 ...cut...
In primo luogo io eviterei di mettere tutto il log file in un array, i 
log files sono notoriamente lunghi, non c'e' motivo di sprecare tanta 
memoria caricandolo tutto.
Usa una cosa del tipo:
while (<FILE_HANDLE>) {
        #analizza la righe
        .........
}
Secondo penso che tu faccia prima a fare una unica regex che match-i i 
capi del log file e poi discrimini usando $1, $2, $3,..$n....
Oppure usando uno split sul divisore dei campi.
Anche se lunghe le strutture delle righe dei log files sono in genere 
semplici.
Terzo che log file e'? apache? hai cercato se esistono tool gia' fatti 
che fanno al caso tuo?
-- 
Saluti,
Giancarlo

 if ($_ !~ /-\s-/ and $_ !~ /\/pm\// or $_ !~ .....) {baubau}
Due piccoli appunti per migliorare la leggibilita` del codice:
1. Se non sei sicuro del funzionamento di una serie di condizioni, evita
i booleani a bassa priorita` (and, or, not) e usa le parentesi coi
booleani ad alta priorita` (&&, ||, !).
2. $_ e` elidibile nell'if:
 unless ((/-\s-/) && (/\/pm\//) || ... ) {
 	...
 }
Bye,
 Emmanuele.
-- 
Emmanuele Bassi         |             [ 
http://digilander.iol.it/ebassi/
 ]
emmanue...@iol.it
  |
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 che fanno al caso tuo?
si, ne esistono un fottio, ma di analisi e report dei log.. io non devo fare
nulla del genere: devo semplicemente tenermi una lista di tutte le operazioni
fatte da utenti in determinate dir.. il cgi viene richiamato in automatico
da un programma creato ad hoc che lo avvia, poi si connette in ftp (riservato)
e si scarica il file, dopodichè aggiorna un database che in un futuro prossimo
andrà integrato in tutta la struttura del database aziendale e del gestionale.
il tutto premendo un bottone o quando avremo l'adsl impostando uno scheduler o
simili (winzozz purtroppo).
grazie mille


grazie a tutti per le risposte