Regex 从标准输入读取参数时出现意外行为

Regex 从标准输入读取参数时出现意外行为,regex,perl,scripting,Regex,Perl,Scripting,显然,0应该是1,因为nam存在于naman字符串中。而且1应该是2,因为n在字符串中出现两次 此代码有什么问题?当您阅读时,需要删除字符串末尾的\n换行符 6 naman nam n 0 1 chomp for $n=, $m=, $p=, $q=, ; 您可能还想通过使用我的词表代替全局变量来考虑更好的范围,并且一些检查使生活变得更容易,如使用严格;使用警告OP可能意味着代码如下 chomp for $n=<STDIN>, $m=<STDIN>,

显然,0应该是1,因为nam存在于naman字符串中。而且1应该是2,因为n在字符串中出现两次

此代码有什么问题?

当您阅读
时,需要删除字符串末尾的
\n
换行符

6
naman
nam
n
0
1
chomp for
$n=,
$m=,
$p=,
$q=,
;

您可能还想通过使用<代码>我的<代码>词表代替全局变量来考虑更好的范围,并且一些检查使生活变得更容易,如<代码>使用严格;使用警告

OP可能意味着代码如下

chomp for
    $n=<STDIN>,
    $m=<STDIN>,
    $p=<STDIN>,
    $q=<STDIN>,
;

你需要告诉我们你的投入是什么。请回答您的问题,并说明如何调用此代码。您应始终使用
use strict;使用警告。您有许多范围问题。
chomp($n=)
$n=;chomp($n)
也同样有效。另外,有没有办法避免在接受如此简单的输入时写这么多次?是的,foreach和变量别名。用$n、$m来咀嚼($=);因此,在Java或C这样的语言中,我们需要在函数调用期间传递参数,以便函数可以访问这些变量。在这里,调用函数时不传递参数。这里发生了什么?函数可能有也可能没有任何参数,它可以返回也可能不返回任何内容。例如,一些函数可以优化数据库,验证过程是否成功完成,并且不返回任何内容。有些函数可能有参数,用它们进行一些运算,然后返回结果——例如计算器运算,如加、减、乘、幂。
chomp for
    $n=<STDIN>,
    $m=<STDIN>,
    $p=<STDIN>,
    $q=<STDIN>,
;
use strict;
use warnings;

my $n = input();
my $m = input();
my $p = input();
my $q = input();

Solution();

sub input{
    my $input = <STDIN>;

    chomp $input;

    return $input;
}

sub Solution{
    my $matchflag=0;
    my $occurence=0;

    #OUPTUT [uncomment & modify if required]
    my $ind=index($m,$p);


    if ($ind!=-1){
       $matchflag=1;
    }

    $occurence= () = $m =~ /$q/g;


    print("Match flag: $matchflag\n");
    print("Ocurance:   $occurence\n");
}
6
naman
nam
n
Match flag: 1
Ocurance:   2