性格悪い人が優勝

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")などで動的に
していしたいためですが。だめなら他の方法は
ないでしょうか?

A 回答 (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;

この回答への補足

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

補足日時:2005/12/13 09:58
    • good
    • 0

>なぜmyをはずすとうまくいくのでしょうか?


Perlの実装者じゃないんで本当の所はよくわかりませんが、
多分、名前の管理をするところが異なるためだと思います。

私も、どちらかというと普通にリファレンスを使った方が良いと思います。
    • good
    • 0

リファレンスを使ったほうがスマートだと思います。



@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;");
    • good
    • 0

# 邪道のシンボリックリファレンスを使って、、



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";
    • good
    • 0

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