使用perl的HASH引用问题

时间:2017-01-25 20:15:05

标签: list perl hash

出现以下错误:

  

名称“main :: s”仅使用一次:第22行可能错误。

     

第5行不是HASH参考。

sub addtwo {

    my $params = shift;

    my $s = $params->{structure};

    if ( ref( $s ) eq "LIST" ) {

        $c = 0;

        foreach $e ( @{$s} ) {
            $s->[$c] = addtwo( { structures => $e } );
            $c++;
        }
    }
    elsif ( ref( $s ) eq "HASH" ) {

        if ( scalar keys %{$s} == 0 ) {
            return undef;
        }
        else {
            foreach my $e ( values %{$s} ) {
                $s{$e} = addtwo( { structure => $s->{$e} } );
            }
        }
    }
    else {
        $s = 1;
    }

    return $c;
}

print addtwo(
    [
        { a => 1, b => 2, c => 3 },
        { d => 4, e => 5 },
        [ 6, 7, 8 ],
        9,
        10,
        11,
        [ 12, 13, 14 ]
    ]
);

1 个答案:

答案 0 :(得分:1)

use strictuse warnings 'all'添加到您编写的每个 Perl程序的顶部。它不是初学者的安全网:它对于任何专业编程都是必不可少的

%s一样,您尚未声明$c$e,除非您至少{my,否则使用use strict毫无意义。 1}}实际上

提供一个“解决方案”就是重写你所放下的大部分内容,所以我认为你最好实施到目前为止给出的建议

但是,正如我在评论中写的那样,请尝试一次编写一小部分程序,并确保在想要添加更多功能时有一个坚实的基础