• 締切済み

perlでの三次元配列の作り方

perlで三次元配列をテキスト入力から作りたいのですが、例えば二次元配列の場合 foreach $line (@input) push @data, [split /[:]/, $line]; で@dataが二次元配列になるのですが、三次元配列の場合このあとに push @output, \@data; とするとリファレンスが同じであるためループをまわしてもうまく三次元になりませんよね。 解決法はありますでしょうか?

みんなの回答

  • 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]; で十分では?

関連するQ&A