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
我尝试编写一个简单的代码来确定一个数字是否可以用 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;
:
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