試作品です。は$$
、help
関数が 2 つの引数を想定し、それぞれがスカラー コンテキストで評価される必要があることを指定します。これは、それらがスカラー値であることを意味しないことに注意してください! Perl のプロトタイプは、他の言語のプロトタイプとは異なります。それらを使用すると、組み込み関数のように動作する関数を定義できます。括弧はオプションであり、コンテキストは引数に課せられます。
sub f($$) { print "@_\n" }
my @a = ('a' .. 'c');
f(@a, 'd'); # prints "3 d"
あなたが見ているエラーメッセージは
help() called too early to check prototype
これは、Perl が関数の宣言を確認してプロトタイプを認識する前に、関数の呼び出しを確認したことを意味します。これは、プロトタイプが強制されておらず、呼び出しが期待どおりに動作しない可能性があることを意味します。
my @a = ('a' .. 'c');
f(@a, 'd'); # prints "a b c d"
sub f($$) { print "@_\n" }
エラーを修正するには、呼び出しの前にサブルーチン定義を移動するか、呼び出しの前に宣言を追加する必要があります。
sub f($$); # forward declaration
my @a = ('a' .. 'c');
f(@a, 'd'); # prints "3 d"
sub f($$) { print "@_\n" }
これらはすべて、新しいバージョンの Perl にアップグレードできるかどうかとはまったく関係ありません。