自分の仕事でコードベースに数多くのPerlスクリプトがあります。そのうちのいくつかは、次の構文の風変わりでサブルーチンが含まれています。Perlパラメータリストのドル、アットマーク、セミコロンの文字はどういう意味ですか?
sub sum($$$) {
my($a,$b,$m)[email protected]_;
for my $i (0..$m) {
$$a[$i] += $$b[$i] if $$b[$i] > 0;
}
}
sub gNode($$;$$) {
my($n,$l,$s,$d) = @_;
return (
"Node name='$n' label='$l' descr='$d'" ,
$s ? ("Shape type='$s' /") :(),
'/Node'
);
}
sub gOut([email protected]) {
my $h = shift;
my $i = shift;
if ($i > 0) {
print $h (('')x$i, map '<'.$_.'>', @_);
} else {
print $h map '<'.$_.'>', @_;
}
}
これらのサブルーチンを行うことを意図しているかの質問(私は自分自身全くわからないが...)ともかく、中の文字のシーケンスを何「パラメータリスト」の位置はどういう意味ですか? Viz。これらの実施例では$$$
,$$;$$
および[email protected]
の配列を含む。
私は、Perlの非常に限られた理解しているが、私は最初の例(sum
)でmy($a,$b,$m)[email protected]_;
ラインが$a
、$b
と$m
ローカル変数にサブルーチンに渡されたパラメータをアンパックと信じています。これは、$$$
がアリティーとタイプシグニチャーであるsum
を示していることを示しています(この場合、3つのスカラーが必要です)。これは、おそらくgOut
が2つのスカラーと配列を必要とすることを示唆します。これは正しい解釈ですか?
上記の解釈が正しい場合でも、2番目のルーチン(gNode
)のセミコロンの意味が分かりません。
これらの記号は、一般的にコードが本当に彼らが何をしていたか知らなかった誰かによって書かれたことを意味します。 Perlのプロトタイプは、少数のケースで本当に役に立ちます。そしてこれらはそのような場合ではありません。 http://www.perlmonks.org/?node_id=861966を参照してください。 –
前の[コメント]の[Dave Cross](http://stackoverflow.com/users/7231/dave-cross)が参照するPerl Monksノードhttp://stackoverflow.com/questions/18006898/what-do-dollar-at-sign-and-semicolon-characters-in-perl-parameter-lists-mean#comment26344863_18006898)は、あなたが今までにしたこと以上のものですPerlの プロトタイプについて知りたい](http://www.perlmonks.org/?node_id=861966) Perlでプロトタイプを使用しようとする人にとっては必須の読書でなければなりません。あなたはそれを読んだ後でPerlでプロトタイプを使うつもりはないので、一度だけ読む必要があります。 –