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

per voi:)
Devo controllare se la stringa $s contiene almeno una stringa dell'array @x
maiuscola o minuscola .
@x=("test","Bc","prova");
$s="stringa Prova";
Grazie ;-)

 Grazie ;-)
Prego,
-- 
+--------+ | ASCII ribbon campaign ( ) | 
www.autistici.org/kral
|  kral  | |  - against HTML email  X  |
+--------+ |              & vCards / \ | my gpg id = 0x7C946947

Estendo il tuo punto di partenza per evitare un piccolo problema
#!perl
use strict;
use warnings;
my @x = qw( test Bc prova str.nga );
my $s = "stringa Prova";
my $word;
foreach $word ( @x ) {
	if( $s =~ /\Q$word/i ) {
		print "$word trovata!\n";
	}
	}
}
__END__
Ho usato \Q nella espressione regolare per effettuare un
"quotemeta" della stringa. Nel mio esempio la parola "str.nga"
non viene individuata all'interno di $word. senza \Q invece il
punto sarebbe stato interpretato come un metacarattere e anche
"str.nga" sarebbe stata individuata.
Considera anche l'uso di \b nelle espressioni regolari per
delimitare l'inizio e la fine delle parole.
Una soluzione alternativa consiste nel usare la funzione index
per cercare la stringa (uc $word) all'interno di (uc $s), dove
uc, convertendo tutto in maiuscolo, risolve i problemi delle
maiuscole/minuscole.
-- 
 Ugo
 perl -e 'print scalar reverse 10.101.100.46.q<lennutnetnauq@ogu>'

 ha scritto nel messaggio
news:pan.2004.06.08....@127.0.0.1...

Ti ringrazio per le precisazioni... e sfruttando la tua disponibilita'
 ne approfitto  per sottoporti il problema attuale :
le stringhe da ricercare le prendo da un file e ci sono anche caratteri
particolari  tipo: *$(-:  che durante la ricerca mi inchiodano il programma
o nel caso di $ fa si che venga trovata sempre.
Per leggere il file uso :
sub caricaRules($_[0]){
use strict;
##########################################
# leggo le stringhe da un file
if(-e $_[0]){
open(F,"<$_[0]");
my $n=0;
my $tipo=0;
while(my $riga=<F>){
          if($riga=~/\[Regole\]/) { }
      elsif($riga=~/\[From\]/)   { $n=0; $tipo=1;}
      elsif($riga=~/\[Domain\]/){ $n=0; $tipo=2;}
      elsif($riga=~/\[Subject\]/){ $n=0; $tipo=3;}
      elsif($riga=~/\[Body\]/)   { $n=0; $tipo=4;}
      elsif($tipo>0){
               my @d=split (/=/,$riga);
               if($d[1]==1){
                          if($tipo == 1){ $fromX[$n++]= $d[0];}
                      elsif($tipo == 2){ $ricevutoX[$n++]= $d[0];}
                      elsif($tipo == 3){ $soggettoX[$n++]= $d[0];}
                      elsif($tipo == 4){ $corpoX[$n++]   = $d[0];}
             }
      }
}
close F;
}
else { print "$_[0] non trovato;"}
}
###############################################
per confrontare usavo :
###############################################
  foreach my $line (split(/\n/,$_[0])){
       foreach my $word ( @X ) {
            if( $line =~ /$word/i ) {
                print "***SPAM DETECTED*** $_[2] |$word|\n"; return $_[1]; }
             }
    }
##############################################
Ovviamente e' parte di uno scriptino che mi serve per cancellare spam e
virus
P.s. Immagino che possa essere scritto molto meglio... ma da inesperto quale
sono mi va benissimo! :-)
Grazie

> > if( $s =~ /\Q$word/i ) {
Ora  funziona tutto!!!!
Grazie 1000 :))))

             if( $line =~ /$word/i ) {
Usa /\Q$word/i invece di /$word/i.
