• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列の中に配列をセットし、呼び出したい)

配列の中に配列をセットし、繰り返し処理で要素を取り出す方法

このQ&Aのポイント
  • 配列の中に別の配列をセットし、ループ処理を行いながら要素を取り出す方法について教えてください。
  • セットした配列の要素を取り出す方法についても教えてください。
  • 具体的には、@listという配列の中に@pickupという配列をセットし、ループ処理を行いながら要素を取り出してみたいです。

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

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

Perlのバージョンそのものも不明(もしかしてPerl4?)ですけども, 前の質問から疑問だったんですが 例えば,配列 @file のインデックス 10 の要素は $file[10] です. @file[10] で配列 @file のインデックス 10 の要素を 示すのは Perl6 の表記法です. ごっちゃごちゃになってませんか? さて,本題. 配列の要素はスカラーのみです. したがって,配列の中に配列をそのままいれることはできません. 前の質問もそうだったのですが Perlの「コンテキスト」という概念を理解してください. >@list[$count] = @pickup;#ここで@listの要素として@pickupをセット (中略) >print $list[80];とすると、@pickupの[0]の要素しか表示しません。 これは $list[$count] (@list[$count]だとエラーになるはず)に @pickup を「スカラーコンテキスト」で評価した値が 代入されるので,$pickup[0] が入るはずはないのです. $#pickup つまり,@pickup の要素数が入るはずです. 配列に配列をいれるとなると 以下のような感じでしょうか. Perl5.8を前提にしています. use strict; use warnings; my $sample="123 ABC XYZ";#サンプルの文字列 my @list; for my $count (0..1000){ $list[$count] = [ $sample=~m<(\d+) (\w+) (\w+)> ]; } print "$list[50]->[0]\n"; print "$list[50]->[1]\n"; マッチ演算をリストコンテキストにおくと ()でキャプチャされたもののリストを返し, それを匿名配列の生成子[]にいれて それをスカラーコンテキストである @lits の各要素への代入に使うことで, 匿名配列へのリファレンスを@listの各要素にいれます. したがって,@listの各要素はそれぞれ 配列へのリファレンスとなり, その要素へは -> でアクセスします. 明示的にデリファレンスして ${ $list[50] }[0] としてもよいのですが やっぱりみにくいですね.

tukikageran
質問者

お礼

たびたびご回答いただきましてありがとうございます。 Perlのバージョンは5.6.1でした。 コンテキストはなかなか難しいですね。 少しはわかっているつもりでしたが、いざ作ってみて躓いて指摘されてみて初めて全然わかっていないことに気がつきました。 ご教授いただいた方法で配列へ代入することができました。 ありがとうございました。 コンテキストについて詳しく書かれているHPがなかなかないので苦労しそうですが勉強してみます。

すると、全ての回答が全文表示されます。

関連するQ&A