我想在cppflags
中自動將cflags
中的所有項目自動加入。我如何?以下失敗代碼:在聲明中使用散列的Perl
my %conf = (
'cflags' => ['-g', '-O0'],
'cppflags' => [ @{$conf{cflags}} ],
'bindir' => $PWD . "/bin",
);
對不起這個愚蠢的問題,我是新來的perl:P。
我想在cppflags
中自動將cflags
中的所有項目自動加入。我如何?以下失敗代碼:在聲明中使用散列的Perl
my %conf = (
'cflags' => ['-g', '-O0'],
'cppflags' => [ @{$conf{cflags}} ],
'bindir' => $PWD . "/bin",
);
對不起這個愚蠢的問題,我是新來的perl:P。
你還在建立分配給%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} } ];
(在減少個人喜好的順序)
如果可以的話,我會讚賞你兩次。可悲的是,我甚至無法提拔你一次(不到15代表),所以有一個動機的評論,而不是:D。 – user2036212
(實際上,'my $ conf'還沒有執行完畢!賦值運算符在它的LHS之前評估它的RHS,這允許像'my $ x = 3; {my $ x = $ x; ++ $ x;說$ x;#4}說$ x;#3'。) – ikegami
重新選擇1:任何理由不要做'cflags => \ @cflags,cppflags => \ @cflags,...''? –
跟進在ikegami的回答中,這裏是有一個稍微不同的使用情況下,另外一個建議:
my @cflags = qw(-g -O0);
my %conf = (
cflags => \@cflags,
cppflags => \@cflags,
bindir => "$PWD/bin",
);
這是不同的,他的#1,因爲@cflags
陣列和鍵cflags
和cppflags
的值都與同一個陣列。改變他們中的任何一個,其他人會反映這個改變。也許這就是你想要的行爲,或者也許沒有,或者對你沒有任何影響,但它就是這樣。
將標誌從cflags複製粘貼到cppflags?或者之後添加一個賦值,比如'$ conf {cppflags} = $ conf {cflags}'。 – TLP
@TLP copypasting很髒。第二種方式很好,但是否存在更好的方式,內聯? – user2036212
這個變量的初始化。它不是動態的,那麼你如何完成這項任務又有什麼關係呢?在創建之前,您無法在'%conf'中使用這些密鑰,因此必須使用相同的數據或之後完成:無法「在線」完成。 – TLP