質問: 引数を受け取る@_について subプロシージャ(関数)の引数について教えていただきたいのですが,例えば, @data1=(1,2,3,4,5); @data2=(6,7,8,9,10); &stat::cov(@data1,@data2); などとすると,sub cov{}で@_という配列の中に一緒に格納されますよね。しかし私としては@data1に格納されているデータと@data2に格納されているデータを別の配列に渡したい(別の配列で受け取るようにしたい)のです。 考えた策としては sub cov{ my $n=@_; my $h=$n/2; for($i=0;$i<$h;$i++){ $x[$i]=shift(@_); } for($k=0;$k<$h;$k++){ $y[$k]=shift(@_); } (以下省略) のように,shift関数で1つずつずらして違う配列に格納していくという方法なのですが,これは@data1と@data2に格納されているデータ数が等しい場合で無いと使いものになりません。 指定した引数を@_以外の配列で受け取らせる方法などはないものでしょうか?ちなみにperlはまだ初心者にも達していないド素人ですのであまりプロ志向のものは勘弁してください(それでもなければ仕方ありませんが、、、)。
回答: ・stat::cov に, 「@data1 の要素数」も渡す: stat::cov の中で splice する. ・stat::cov を宣言するときに sub cov(\@\@) とプロトタイプを付ける: 結果的に #1 と同じようにリファレンスが渡される. & を付けて呼出してはいけない. くらい?