2

我是 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 "])"

当我尝试用谷歌搜索它时,我发现这个网站让我觉得在子例程调用之前加上一个&符号就足够了。我试过了,它确实有帮助。

但是,当我后来遇到另一个问题时,谷歌搜索把我带到了这个 SO question。关键是答案指出

您应该调用不带 & 的子程序,例如 populate(...),除非您特别想覆盖子程序的原型。如果你不知道原型是什么,就不要使用 &。

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

谢谢!

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

4

1 回答 1

6

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

你可能想这样称呼它:

mysub(\%info)

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

于 2013-02-23T17:35:55.097 回答