- ベストアンサー
構造体の配列の指定方法
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")などで動的に していしたいためですが。だめなら他の方法は ないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#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;
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>なぜmyをはずすとうまくいくのでしょうか? Perlの実装者じゃないんで本当の所はよくわかりませんが、 多分、名前の管理をするところが異なるためだと思います。 私も、どちらかというと普通にリファレンスを使った方が良いと思います。
- twinkleluz
- ベストアンサー率52% (98/185)
リファレンスを使ったほうがスマートだと思います。 @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 strict; @a = qw( a1 a2 ); @a1 = ( 1, 2, 3 ); @a2 = qw( a b c ); print ${$a[0]}[2], "\n"; print ${$a[1]}[1], "\n";
補足
回答ありがとうございます。 ところでなぜmyをはずすとうまくいくのでしょうか?