• ベストアンサー
  • 困ってます

perl 配列名変数指定するには

  • 質問No.7607620
  • 閲覧数585
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 73% (45/61)

perlプログラムで
for文で ループ分の配列定義するには どうしたらよいですか?

下記のようなことができないかと 考えております。
for(my $i = 0; $i < $file_no; $i++){
my @{"segments$i"} =(); #配列定義
my ${"line$i"}="";     #変数定義
my %{"hash$i"}= ();    #ハッシュ定義
open(ARG1,$ARGV[$i]);
while(<ARG1>){
${'line'.$i} = $_;
chomp ${'line'.$i};
@{'segments'.$i} = split(/\t/,${'line'.$i});
       ${'hash'.$i}{${'segments'.$i}[0]}=${'segments'.$i}[1];
    }
close(ARG1);
}
#下記で、その後 各ハッシュに設定したデータをもとに いろいろ計算したい
foreach my $a (keys %{'hash'.$i}){
・・・


今は、Can't declare array dereference in "my" at test.pl line XX, near "} =" と 配列定義でエラーとなり処理できません。

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

  • 回答No.1
  • ベストアンサー

ベストアンサー率 23% (3656/15482)

えぇっと.... わざわざそんな面倒なことをする理由が思いつかない. 配列とリファレンスを使えば同じことができる. たとえば「lineほげほげ」は, 配列を使って
${'line'.$i} = $_;
の代わりに
$line[$i] = $_;
とすればより簡単になるのでは.

ところで, forループの中で my するとその変数は「forループの外」では使えないような気がするんだが....
補足コメント
1204533

お礼率 73% (45/61)

リファレンスを使えばよいとは わかったのですが、そもそも このような書き方がダメな理由が分からなかったので、教えてほしかったのです。
my は for文の中だけしか利用できないのは 見落としておりました。
むしろ それがひっかかっていたような気がします。
投稿日時:2012/07/24 15:47
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ