Perl:没有足够的函数参数

时间:2013-02-23 17:29:38

标签: perl

我是Perl的新手,目前正在尝试理解提到的错误消息。

我有这段代码(主要用于测试pourposes)

#!/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 "])"

当我尝试google它时,我发现this site让我觉得在用子符号进行子程序调用之前就足够了。我试了一下它确实有所帮助。

然而,当我后来遇到另一个问题时,谷歌搜索带我去了this SO question。重点是答案陈述

  

你应该在没有&的情况下调用子程序,例如填充(...),除非您特别想要覆盖子的原型。如果您不知道原型是什么,请不要使用&。

我完全不知道Perl上下文中的原型是什么。 那么 - 现实是什么样的?我应该只使用&或者还有其他可能更“干净”的解决方案吗?

谢谢!

(顺便说一下,如果我可能会问一些OT问题 - 我应该在调用之后真正定义子程序吗?对我来说这似乎很不自然,但是,我已经发现恢复顺序会让编译器抱怨)

1 个答案:

答案 0 :(得分:6)

vec是一个perl内置函数,你得到名称冲突(perldoc -f vec)。将你的子程序称为别的东西。

您可能想要这样称呼它:

mysub(\%info)

在Perl中,您可以在声明它之前或之后调用子例程。对此的唯一限制是使用原型时,您可能不想这样做。当你颠倒顺序时会得到什么错误(“让编译器抱怨”没有多大帮助)?可能是因为名称冲突。