作者frank1983 (What?)
看板Perl
標題Re: [問題] 同一個key值下push問題
時間Fri Mar 19 01:29:20 2010
※ 引述《wscrush (請詳細填寫個人資料)》之銘言:
: 標題: [問題] 同一個key值下push問題
: 時間: Thu Mar 18 22:33:11 2010
:
: 大家好:
: 我想寫一個小程式
: 程式碼如下
: --
: $string="Hi";
: %hash=(key=>$string);
: print "$hash{key}\n";
: push($string,"jack");
: --
: 很明顯的結果告訴我,string必須為array才可使用push
: 因此我改寫成
: --
: @string="Hi";
: %hash=(key=>@string);
: print "$hash{key}\n";
: push(@string,"jack");
: %hash=(key=>@string);
: print "$hash{key}\n";
: --
: 輸出結果卻變為
: Hi
: Hi
:
: 可是當我回頭去print出@string時,卻可以得到
: Hi jack
:
: 找了很久始終找不出原因@"@
:
: 不知各位是否可以給我一些建議
:
: 或是我本身的想法 or 寫法有誤
:
: 謝謝
你必須傳 @string 的參照給 key 才對
改寫的版本如下
@string="Hi";
%hash=(key=>\@string);
print "@{$hash{key}}\n";
push(@string,"jack");
print "@{$hash{key}}\n";
你原本的程式
push(@string,"jack");
%hash=(key=>@string);
會有問題:
此時 @string 的值為 ('Hi', 'jack');
而 %hash=(key=>@string);
真正的意義為 %hash=(key=>'Hi','jack');
(@string 會被展開,因為它是在 list context 下)
所以 %hash 實際包含兩個 key: 'key' 和 'jack'
'key' 的值為 'Hi',而 'jack' 的值為 undef
這可由
use Data::Dumper;
print Dumper(\%hash);
確認
也就是說
%hash = @array;
代表 @array 的奇數項為 key,而偶數項則為 value
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.178.113
1F:推 wscrush:獲益良多~感謝 03/19 01:56
2F:推 cutecpu:獲益良多,原來(key=>@string)會被展成(key=>'Hi','jack') 03/19 08:37
3F:推 halu741101:good 感謝! 03/19 14:29