2011-02-17 3 views

Répondre

0

Oh, compris comment le faire. Il s'est avéré être assez simple Mais comment le faire si je ne veux pas que la recherche soit sensible à la casse?

print "Name: "; 
my $string = <>; 

open FILE, "test.txt" or die $!; 

while(<FILE>) { 
    chomp; 
    print "$_\n" if(/$string*/); 
} 
close FILE; 
+1

Vous devez ajouter un 'i' à l'opérateur de correspondance de modèle:'/$ string */i'. –

+1

vous aussi voudrez probablement 'tronquer string' –

+0

$ Si vous voulez rendre le programme plus concis, remplacer la boucle avec:' impression grep {/ $ string/i} '. Reportez-vous: [perlretut] (http://perldoc.perl.org/perlretut.html) et [perlre] (http://perldoc.perl.org/perlre.html). –

1

Vous ajoutez l'expression régulière modificateur "i"

print "Name: "; 
my $string = <>; 

open FILE, "test.txt" or die $!; 

while(<FILE>) { 
    chomp; 
    print "$_\n" if(/$string*/i); 
} 
close FILE; 
+0

lexical utilise typeglob pas – xenoterracide

0

Une doublure:

perl -nE 'BEGIN{$pattern=shift};say if /$pattern/i' pattern filename(s) 

ou

perl -nE 'BEGIN{$pattern=shift};say "$ARGV $.: $_" if /$pattern/i' pattern filename(s) 

pour obtenir le fichier et le numéro de ligne aussi.

0

Votre tout corps de la boucle est un peu complexe. Cela fonctionne également.

while (<FILE>) { print if /$string/i } 

Il n'y a pas besoin de tronquer la nouvelle ligne, puis ajoutez-le dans

+0

lexical le descripteur devrait être un commentaire? utilise aussi TYPEGLOB Filehandle pas lexical – xenoterracide

5

Il y a deux concepts distincts dans cette réponse:

  1. fichier IO et itérer toutes les lignes dans un tout
  2. expression régulière, et en passant en particulier une variable à une expression régulière.

Notez l'utilisation de quotemeta. Il est important que l'entrée de l'utilisateur contienne des caractères spécifiques à RE (qui peuvent même créer un RE illigel si vous ne le manipulez pas).

Voici le code:

print "Looking for: "; 
my $input = <>; 
chomp $input; 
my $re = quotemeta $input; 

open my $fh, "<", "myfile.txt" or die $!; 
while(<$fh>) { 
    print if /$re/; 
} 
close $fh; 
Questions connexes