プロが教えるわが家の防犯対策術!

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 "} =" と 配列定義でエラーとなり処理できません。

A 回答 (1件)

えぇっと.... わざわざそんな面倒なことをする理由が思いつかない. 配列とリファレンスを使えば同じことができる. たとえば「lineほげほげ」は, 配列を使って


${'line'.$i} = $_;
の代わりに
$line[$i] = $_;
とすればより簡単になるのでは.

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

この回答への補足

リファレンスを使えばよいとは わかったのですが、そもそも このような書き方がダメな理由が分からなかったので、教えてほしかったのです。
my は for文の中だけしか利用できないのは 見落としておりました。
むしろ それがひっかかっていたような気がします。

補足日時:2012/07/24 15:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!