Perl在声明期间使用哈希

时间:2013-02-02 23:38:17

标签: perl hash reference

我希望cflags中的所有项目都自动放在cppflags中。我如何能?遵循失败代码:

my %conf = (
    'cflags'   => ['-g', '-O0'],
    'cppflags' => [ @{$conf{cflags}} ],
    'bindir'   => $PWD . "/bin",
);

抱歉这个愚蠢的问题,我是perl的新手:P。

2 个答案:

答案 0 :(得分:3)

您仍在构建要分配给%conf的列表,因此尚未向%conf分配任何内容,因此尝试从$conf{cflags}进行阅读将毫无结果。

选项1:

my @cflags = qw( -g -O0 );
my %conf = (
    cflags   => [ @cflags ],
    cppflags => [ @cflags ],
    bindir   => "$PWD/bin",
);

选项2:

my %conf;
$conf{cflags  } = [qw( -g -O0 )];
$conf{cppflags} = [ @{ $conf{cflags} } ];
$conf{bindir  } = "$PWD/bin";

选项3:

my %conf = (
    cflags => [qw( -g -O0 )],
    bindir => "$PWD/bin",
);
$conf{cppflags} = [ @{ $conf{cflags} } ];

(按个人喜好的降序排列。)

答案 1 :(得分:1)

为了跟进ikegami的回答,这里有另一个建议,用例略有不同:

my @cflags = qw( -g -O0 );
my %conf = (
    cflags   => \@cflags,
    cppflags => \@cflags,
    bindir   => "$PWD/bin",
);

这与他的#1不同,因为@cflags数组以及键cflagscppflags的值都与同一个数组相关。更改其中任何一个,其他人将反映更改。也许这就是你想要的行为,或者也许它不是,或者它对你没有任何影响,但它确实存在。