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

池上の答えをフォローアップするために、ユースケースが少し異なるもう1つの提案を次に示します。

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

これは、@cflags配列とキーの値cflagscppflagsすべて同じ配列に関連しているため、彼の #1 とは異なります。それらのいずれかを変更すると、他のものに変更が反映されます。おそらく、これはあなたが望んでいる振る舞いであるかもしれませんし、そうでないかもしれませんし、あるいはあなたにとって何の違いもないかもしれません。

于 2013-02-04T04:49:33.943 に答える