我是 Perl 的新手,目前正在尝试理解提到的错误消息。
我有这段代码(仍然主要用于测试目的)
#!/usr/bin/perl
use strict;
use warnings;
my %info = (autor => "Karryanna", jazyk => "cs");
vec([%info]);
sub vec
{
my ($hashref) = @_;
print $hashref->autor . "\n";
}
当我尝试运行它时,它给出了此错误消息
Not enough arguments for vec at test.pl line 8, near "])"
当我尝试用谷歌搜索时,我发现这个网站 http://ubuntuforums.org/showthread.php?t=293902这让我觉得在子例程调用之前加上一个 & 符号就足够了。我尝试了一下,确实有帮助。
然而,当我后来遇到另一个问题时,谷歌搜索把我带到了这个问题 https://stackoverflow.com/questions/6985643/reference-found-where-even-sized-list-expected。重点是答案指出
您应该调用不带 & 的子例程,例如populate(...),除非你特别想覆盖子的原型。如果您不知道原型是什么,就不要使用 & 。
我完全不知道 Perl 上下文中的原型是什么。
那么 - 现实是什么样的?我应该只使用 & 还是有其他可能更“干净”的解决方案?
Thanks!
(顺便说一句,如果我可以问一点OT问题——我应该在调用子例程后真正定义它吗?这对我来说真的很不自然,但是,我已经发现恢复顺序会让编译器抱怨)
vec
是一个 perl 内置函数,你会遇到名称冲突(perldoc -f vec
)。将您的子例程命名为其他名称。
您可能想这样称呼它:
mysub(\%info)
在 Perl 中,您可以在声明子例程之前或之后调用它。唯一的限制是使用原型时,您可能不想这样做。当你颠倒顺序时,你会得到什么错误(“让编译器抱怨”没有多大帮助)?可能是因为名字冲突。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)