如何在perl中grep读取文件

时间:2013-05-20 03:42:55

标签: perl grep

我想在perl中读取一个文件,之后,用户可以输入任何字符串,grep会尝试查找在文件中输入的字符串读取。它只会在用户输入任何内容或任何空格字符时退出。这是我的代码无效:

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

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

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

我仍然缺乏输入任何内容或换行或任何空格字符时退出的条件。

2 个答案:

答案 0 :(得分:3)

while (<>)

装置

while (defined($_ = <>))

因此需要按Ctrl-D(unix)或Ctrl-Z,Enter(Windows)来指示输入结束。或者您可以添加一个空行检查:

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

答案 1 :(得分:1)

使用my @match = grep {/\b$_\b/s} @lines;的示例中可能存在问题,因为grep不能处理用户输入,但只能使用@lines的内容。它的作用是:

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

你可能想要这个:

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;
}