• ベストアンサー

構造体の配列の指定方法

use Class::Struct; struct command => [ my @pppoe = (command->new( name => 'pppoe1', com1 => 'pppoe1 -m', com2 => 'pppoe1 -c',), command->new( name => 'pppoe2', com1 => 'pppoe2 -m', com2 => 'pppoe2 -c',)) という風な定義になっているときに、 print ${"pppoe"}[0]->name; というような指定はできないでしょうか? 配列名を入れた配列@a=("pppoe")などで動的に していしたいためですが。だめなら他の方法は ないでしょうか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#myをやめる use Class::Struct; struct Command => [ name => '$', com1 => '$', com2 => '$', ]; @pppoe = ( Command->new( name => 'pppoe1', com1 => 'pppoe1 -m', com2 => 'pppoe1 -c'), Command->new( name => 'pppoe2', com1 => 'pppoe2 -m', com2 => 'pppoe2 -c',)); print ${"pppoe"}[0]->name;

tamukikun
質問者

補足

回答ありがとうございます。 ところでなぜmyをはずすとうまくいくのでしょうか?

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>なぜmyをはずすとうまくいくのでしょうか? Perlの実装者じゃないんで本当の所はよくわかりませんが、 多分、名前の管理をするところが異なるためだと思います。 私も、どちらかというと普通にリファレンスを使った方が良いと思います。

回答No.3

リファレンスを使ったほうがスマートだと思います。 @a = (\@pppoe); print $a[0][0]->name; ハッシュを使った場合。こちらのほうがよりベター? my %arrayHash = (pppoe => \@pppoe); print $arrayHash{pppoe}[0]->name; # もちろんハッシュのキーは文字列変数で指定できる my $key = "pppoe"; print $arrayHash{$pppoe}[0]->name; どうしてもリファレンスを使いたくなかったらevalで。 my $arrayName = "pppoe"; eval("print \${$arrayName}[0]->name;");

  • okiyoshi
  • ベストアンサー率34% (11/32)
回答No.1

# 邪道のシンボリックリファレンスを使って、、 no strict; @a = qw( a1 a2 ); @a1 = ( 1, 2, 3 ); @a2 = qw( a b c ); print ${$a[0]}[2], "\n"; print ${$a[1]}[1], "\n";

関連するQ&A

専門家に質問してみよう