プロが教える店舗&オフィスのセキュリティ対策術

@data に大量のデータが格納されていると仮定して、次のようにループ処理するとします・・・

for($i = 0 ; $i < @data ; ++$i){
@XXX = split(/\t/, $data[$i]);
}

このように @data のデータをさらに細かく配列化して @XXX に代入したいのですが、ループのたびに @XXX の名前を XXX0 , XXX1 , XXX2..... とするには、どうしたらよいのでしょうか。

A 回答 (3件)

for($i = 0 ; $i < @data ; ++$i){


@{"XXX$i"} = split(/\t/, $data[$i]);
}

とやれば、できるけど・・・。

ちなみに、なんで独立した変数に@dataの各要素を入れたいの?
$data[$i]をそのまま使えばいいんじゃない。$data[$i]の各要素が必要な度にsplitして使えばいいと思うんだけど。同じ内容のデータを@dataと@XXX0,@XXX1...で2つ持つのも非効率だし、参照も面倒だし、あまり嬉しいいことないから、私だったら、こういった変数の使い方はしないな。
    • good
    • 0

無名配列をうまく使えばいいのではないでしょうか?



@data = map { [split(/\t/,$_)] } @data;

例えばこんな風にすれば、@dataの各要素を \t で分割し、それを無名配列とする。さらに、その無名配列を要素とする@dataを再構築する。
$data[x]->[y] で、データへのアクセスができます。

この回答への補足

tancoro => tancoro さん
失礼しました。

補足日時:2003/06/12 16:19
    • good
    • 0
この回答へのお礼

こんなに早く答えていただけるとは思っていませんでした。 どの回答もばっちりなので皆さんにポイントを発行したいのですが、無理なようなので早い人順にします。 tancoro ごめんなさい。 皆さんありがとうございました。

お礼日時:2003/06/12 16:18

通常は配列を使うのでは。


こんな感じ:

for( my $i = 0 ; $i <= $#data ; $i++ ){
$XXX[$i] = [ split( /\t/, $data[$i] ) ];
}

print $XXX[0]->[0], "\n";

詳しくは、Perl付属ドキュメントperlref/perldata/perlfaq4あたりをごらんになってみては。
    • good
    • 0

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