有人能指出我在这个perl程序中所犯的错误吗?

时间:2016-04-14 07:36:33

标签: regex perl

根据以下代码,我应该打印一次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";

4 个答案:

答案 0 :(得分:7)

您需要从输入中删除换行符,只需调用chomp

chomp($find = <STDIN>);

如果没有,如果您在提示符下输入“bibhu”,$find将等于"bibhu\n"

答案 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