gpt4 book ai didi

Perl:函数参数不足

转载 作者:行者123 更新时间:2023-12-03 05:01:25 25 4
gpt4 key购买 nike

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

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

但是,当我后来遇到另一个问题时,谷歌搜索将我带到了 this SO question 。重点是答案指出

You should call subroutines without &, e.g. populate(...), unless you specifically want to override the prototype of the sub. If you don't know what a prototype is, just don't use &.

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

谢谢!

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

最佳答案

vec 是一个 perl 内置函数,您会遇到名称冲突 (perldoc -f vec)。将您的子例程命名为其他名称。

您可能想这样调用它:

mysub(\%info)

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

关于Perl:函数参数不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15043414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com