我创建了两个sub来做Fibonacci而另一个来测试偶数。当我打电话给它虽然它在第7行说我的for循环时,子Fibonacci是非法的为什么?
#!/usr/bin/perl
use strict;
use warnings;
my ($x,$y);
my $num = 0;
sub Fibs($start,$stop){
for ($start..$stop){
($x, $y) = ($y, $x+$y);
my $total += $y;
}
print "$total \n"
}
sub even($num){
if ($num % 2 == 0){
return $num;}
}
my $big_total = Fibs(even($num), 3999999)
根据以下建议编辑。
显然我错过了一些东西。从反馈更新到新版本。
#!/usr/bin/perl
use strict;
use warnings;
my ($x,$y);
my $num = 0;
sub Fibs{
my ($start, $stop) = @_ ;
for ($start..$stop){
my ($x, $y) = (0,2);
if ($x % 2 == 0){
($x, $y) = ($y, $x+$y);
my $total += $y;
}
}
my $big_total = Fibs(0, 3999999)
答案 0 :(得分:4)
除了缺少的开括号外,Perl不支持子程序参数的那种声明。
而不是
sub Fibs($start, $stop) {
...
}
你需要写一些类似的东西:
sub Fibs {
my($start, $stop) = @_;
...
}
(Perl确实有原型,但它们并不是真的用于声明参数类型,也不提供名称。请参阅this article进行讨论。)
其他问题:
你应该添加
use strict;
use warnings;
您永远不会使用您在外部范围内声明的$x
和$y
。
您的even
功能似乎不完整。如果它的参数是奇数,它不会(显式地)返回一个值。它究竟打算做什么?