1

我想将所有项目cflags自动放入cppflags. 我如何?以下失败代码:

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

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

4

2 回答 2

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} } ];

(按个人喜好递减顺序。)

于 2013-02-02T23:42:02.163 回答
1

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

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

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

于 2013-02-04T04:49:33.943 回答