- 締切済み
perlでの三次元配列の作り方
perlで三次元配列をテキスト入力から作りたいのですが、例えば二次元配列の場合 foreach $line (@input) push @data, [split /[:]/, $line]; で@dataが二次元配列になるのですが、三次元配列の場合このあとに push @output, \@data; とするとリファレンスが同じであるためループをまわしてもうまく三次元になりませんよね。 解決法はありますでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ryu_chan
- ベストアンサー率37% (69/186)
回答No.2
いわゆるdeep copyをしたいわけでしょうか? Storableモジュールのdclone関数を使えばdeep copyしてくれると思います。 use Data::Dumper; use Storable qw(dclone); my (@data, @output); my @input = qw(1:2 a:b); foreach $line (@input) { push @data, [split /:/, $line]; push @output, dclone(\@data); } print Dumper \@output;
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
そもそも Perl だと foreach $line (@input) push @data, [split /[:]/, $line]; とは書けない. 本題は「リファレンスが同じになることが問題」であるなら「必ずリファレンスが違うようにすればいい」ということになる. 適切に my するのが最も簡単か. あと, push @data, [split /[:]/, $line]; には違和感がある. push @data, [split /:/, $line]; で十分では?