• ベストアンサー

プロトタイプ

質問が二つあります。 ($;@) と書けば、一つ以上の引数を受け付けます。 (\@;\@) と書けば、一つもしくは、二つの配列を引数として受け付けます。 では、一つ以上の配列を引数として受け付けたい場合はどうしたらいいんでしょうか。 (\@;\@\@\@\@\@\@\@\@\@\@……) みたいな感じです。 これが一つ目の質問です。 二つ目の質問は、 ([@])これなんでしたっけ? (\@)とは何か明確な違いがあると思いましたが、思い出せないし、どこに書いてあったのかも覚えてません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

ん~, perldoc を読んだ限りでは無理っぽいです. とりあえず @ で受けておいて, サブルーチンの方でチェックするしかないんじゃないかなぁ....

TANUKIA
質問者

お礼

わざわざありがとうございます。 しばらく保留することにしました。

その他の回答 (2)

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.3

プロトタイプじゃ無理なんじゃない 無名配列で受け渡せば,見た目はひとつの引数で 実際は無制限の引数を渡せるから困らない. #call by valueとcall by referenceに気をつける必要はあるけど ============= D. Conwayがプロトタイプはbest practiceではない 使うべきではないといっているが 私もそう思う. PerlはCではないんだし. ============== sub hoge{ my @temp = @{$_[0]} ...... } hoge [[a],[b],[c],....] 動かしてないけど,こういう感じで, 無名配列(可変長リスト)を渡せばいい.

TANUKIA
質問者

お礼

ありがとうございます。 呼び出し方が変わるのでそれはできません。(結合も含めて)。 あと、配列からなったリストではなく、配列からなる配列に限定して欲しいのです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

1つ目: たぶん (プロトタイプで指定するのは) 無理. 2つ目: 手元の ActivePerl 5.14.2 だと [@] には「Malformed prototype」と文句を言ってくるので, 少なくともこのバージョンでは使えない. \[@] なら使えるけど \@ と同じ意味にしかならないと思う.

TANUKIA
質問者

お礼

一つ目の質問は無理ですかー。ずっと使い回せてコンパクトなの関数が欲しかったので困りました。 ありがとうございました。 二つ目は書き間違えました。

関連するQ&A

専門家に質問してみよう