【发布时间】:2017-01-25 20:15:04
【问题描述】:
出现以下错误:
名称“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 ]
]
);
【问题讨论】:
-
第三个错误(您还没有遇到):第 11 行您正在传递一个带有
structures键的结构,而不是structure。 -
错误:
ref($s) eq "LIST"应该是ref($s) eq "ARRAY" -
提示:
$s->[$c] = addtwo({ structures => $e });应该是push @$s, addtwo({ structures => $e }); -
@user3047080:我认为你一次写的太多了。编写程序通常分小步进行:您应该输入几行代码并运行您的程序,以确保它可以编译和运行。然后你有一些东西可以建立。金字塔不是通过将数百万块石块放在适当的位置然后逃跑,手指交叉而建造的。