Perl子例程不在循环中工作

Perl subroutine not working in loop

我尝试编写一个简单的代码来确定一个数字是否可以用 Perl 表示为素数之和。示例代码如图:

sub funcIsPrime {
    my $num = $_[0];    
    my $isPrime = 1;
    for($i= 2; $i <= $num/2; $i++){
        if($num%$i == 0){
            $isPrime = 0;
            last;
        }
    }
    return $isPrime;
}

#my $num = <>;
my $num = 20;
for($i = 2; $i <= $num/2; $i++){
    print "$i\t";
    my $j = $num-$i;
    print "$j\n";

    if(funcIsPrime($i) and funcIsPrime($j)){    # Line x
        print "$num = $i + $j\n";
    }
}

第x行的函数调用语句没有执行。放在循环外的同一行工作正常。可能的解决方案是什么?请帮忙。谢谢。

主要问题是变量声明中缺少 my。如果包含 use warnings;use strict;:

,Perl 不会让您 运行 程序
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at test.pl line 22.
Execution of test.pl aborted due to compilation errors.

这是简化的工作代码(顺便说一下,您可以搜索直到 n 的平方根的因子,尽管这无论如何都不是完美或有效的素数测试):

use strict;
use warnings;

sub isPrime {
    my $num = $_[0];    

    for (my $i = int sqrt $num; $i > 1; $i--) {
        if ($num % $i == 0) {
            return 0;
        }
    }

    return 1;
}

my $num = 20;

for (my $i = 2; $i <= $num / 2; $i++) {
    my $j = $num - $i;

    if (isPrime($i) && isPrime($j)) {
        print "$num = $i + $j\n";
    }
}

输出

20 = 3 + 17
20 = 7 + 13