• ベストアンサー

perlの配列追加について

perlの配列の扱いについて質問です。 例えば、10個ほどの要素がある配列があるとして新しい要素を配列の任意の場所に追加する方法ってsplice関数を使うのが普通なのでしょうか? 本を参考にsplice関数を使ってみたら任意の場所に上書きのようになってしまいました(単に自分のやり方が悪いだけかもしれませんが)。 perlで簡単に配列の任意の場所へ、上書きではなく追加する方法をどなたか教えてください。 宜しくお願い致します。

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

  • ベストアンサー
  • W_H
  • ベストアンサー率47% (21/44)
回答No.2

ループで配列の中身を読み込みながら別の新しい配列に値を入れ、その途中で、目的の場所になったらそこに入れたいデータを挿入するプログラムを書けばどうでしょうか。 $n=3;#どこに追加するか $dat="new";#新データ @arr=(0,1,2,3,4,5,6,7,8,9);#データを追加する配列 my(@new); --$n;#数字調整 for($a=0;$a<=$#arr;++$a){ if($a==$n){push(@new,$dat);}else{}#新データを入れる push(@new,$arr[$a]);#配列のデータを入れる。 } 大体こんな感じでしょうか。上三行は設定です。 適当に書いたサンプルなので、少し突っ込みどころとか間違いもあるかもしれません。他にも、while(@arr){}とshift(@arr)を使って、もう少し見た目すっきりにすることはできそうですね。 後アドバイスとして、関数に不満があったり、上手く動かなかったら、自作した方がいいですよ。

msak777
質問者

お礼

回答ありがとうございます。 関数があまり当てにならないので自作の方向で検討してみますw 何事も練習ということで、参考にさせてもらいます。

その他の回答 (1)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

spliceですねぇ。 http://www.rfs.jp/sb/perl/05/splice.html なにかを勘違いしちゃったんじゃないでしょうか? @Arr = qw|ab cd ef gh|; @Arr2 = qw|WX YZ|; splice @Arr,2,0,@Arr2; # @Arrの#2の位置から0個の要素を削除し、@Arr2を挿入する。 print "@Arr";# 結果 → ab cd WX YZ ef gh

msak777
質問者

補足

回答ありがとうございます。 やはりspliceを使うのが無難なのですねw ただ、再度試した結果やはり追加というより上書きのようになってしまいますorz 例> @array=(a,b,c,d,e); $test="test"; splice @array,2,0,$test; print @array; 結果は→a b ctest d e のような感じなってしまいます。 splice関数で何か注意点などがあれば教えてください お願いします。

関連するQ&A