我想在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;
}
我仍然缺乏输入任何内容或换行或任何空格字符时退出的条件。
答案 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;
}