私は 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 "])"
ググってみたところ、サブルーチン呼び出しの前にアンパサンドを付ければ十分だと思わせるサイトを見つけました。試してみましたが、本当に助かりました。
ただし、後で別の問題に遭遇したとき、グーグルでこの SO questionにたどり着きました。ポイントは、答えが述べていることです
サブルーチンのプロトタイプを特にオーバーライドしたい場合を除き、populate(...) などの & なしでサブルーチンを呼び出す必要があります。プロトタイプが何かわからない場合は、& を使用しないでください。
Perl コンテキストでのプロトタイプとは何か、まったくわかりません。それで - 現実はどうですか?& を使用する必要がありますか、それとも他の、おそらくもっと「クリーンな」ソリューションがありますか?
ありがとう!
(ちなみに、少し OT の質問をさせていただく場合は、サブルーチンを呼び出した後に本当に定義する必要がありますか? それは私には非常に不自然に思えますが、順序を元に戻すとコンパイラが文句を言うことを既に発見しています)