2013-05-20 4 views
1

Je voudrais lire un fichier dans perl, après, l'utilisateur peut entrer n'importe quelle chaîne et grep va essayer de trouver la chaîne entrée dans le fichier lu. Il ne sortira que lorsque l'utilisateur n'aura rien entré ou n'importe quel caractère d'espace. Voici mon code qui ne fonctionne pas:Comment grep lire le fichier en perl

#! usr/bin/perl 
use warnings; 
use strict; 

open MATCHSTRING,"matchstring"; 
my @lines = <MATCHSTRING>; 

while (<>) { 
    chomp; 
    my @match = grep {/\b$_\b/s} @lines; 
    print @match; 
    } 

Je manque encore la condition où elle sortira une fois rien est entré ou un saut de ligne ou tout autre espace.

Répondre

1

Il est possible problème dans votre exemple avec my @match = grep {/\b$_\b/s} @lines; que grep ne fonctionne pas avec l'entrée d'utilisateur, mais seulement avec le contenu de @lines. Ce qu'il fait est le suivant:

grep { $lines[index] =~ /\b$lines[index]\b/s } 

et que vous voulez sans doute ceci:

while (my $input = <>) { 
    chomp($input); 
    last if $input =~ /^ \s* $/x; # exit loop if no input or only whitespaces 

    my @match = grep { /\b$input\b/s } @lines; 
    print @match; 
} 
3
while (<>) 

signifie

while (defined($_ = <>)) 

donc besoin d'appuyer pour signaler la fin de l'entrée Ctrl-D (unix) ou Ctrl-Z, Entrée (Windows). Ou vous pouvez ajouter un chèque pour une ligne vide:

while (<>) { 
    chomp; 
    last if $_ eq ""; 
    print grep /\b$_\b/s, @lines; 
}