根据以下代码,我应该打印一次bibhu
,如果我输入" bibhu" j
应为1在运行时。但它没有发生。为什么我会收到j=0
?
print "enter\n";
$find=<STDIN>;
$j=0;
@lines=qw(bibhu prasanna behera kuni shun jbjdkj);
foreach (@lines) {
if ($_ =~ /$find/) {
print "$_\n";
$j=$j+1;
}
}
print "$j\n";
答案 0 :(得分:7)
答案 1 :(得分:1)
这是一个略微改进的脚本版本 - 正如Lucas T.所写的那样,您需要使用chomp删除输入字符串末尾的换行符:
#!/usr/bin/perl -w
use strict;
print "enter\n";
chomp(my $find=(<STDIN>));
my $j=0;
my @lines=qw(bibhu prasanna behera kuni shun jbjdkj);
foreach (@lines) {
if (/$find/o) {
print "$_\n";
$j=$j+1;
}
}
print "$j\n";
答案 2 :(得分:0)
我反思:您可以在\n
中的$_
添加if
:
...
if ("$_\n" =~ /$find/) {
...
答案 3 :(得分:0)
原因是您的输入包含换行符。因此,您应该从输入或正则表达式中删除换行符以允许换行符。
从输入使用chomp
中删除换行符,如其他答案所述。
另一种方法是你应该使用x flag标志来允许正则表达式中的空格或换行符。
print "enter\n";
$find=<STDIN>;
$j=0;
@lines=qw(bibhu prasanna behera kuni shun jbjdkj);
foreach (@lines) {
if ($_ =~ /$find/x) {
print "$_\n";
$j=$j+1;
}
}
print "$j\n";
但最好使用chomp