为什么我的for循环是非法声明

时间:2011-12-03 10:05:27

标签: perl for-loop

我创建了两个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)

1 个答案:

答案 0 :(得分:4)

除了缺少的开括号外,Perl不支持子程序参数的那种声明。

而不是

sub Fibs($start, $stop) {
    ...
}

你需要写一些类似的东西:

sub Fibs {
    my($start, $stop) = @_;
    ...
}

(Perl确实有原型,但它们并不是真的用于声明参数类型,也不提供名称。请参阅this article进行讨论。)

其他问题:

你应该添加

use strict;
use warnings;

您永远不会使用您在外部范围内声明的$x$y

您的even功能似乎不完整。如果它的参数是奇数,它不会(显式地)返回一个值。它究竟打算做什么?