Re: [問題] 同一個key值下push問題

看板Perl作者 (What?)時間15年前 (2010/03/19 01:29), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

03/19 01:56, , 1F
獲益良多~感謝
03/19 01:56, 1F

03/19 08:37, , 2F
獲益良多,原來(key=>@string)會被展成(key=>'Hi','jack')
03/19 08:37, 2F

03/19 14:29, , 3F
good 感謝!
03/19 14:29, 3F
文章代碼(AID): #1BecBp_H (Perl)
討論串 (同標題文章)
文章代碼(AID): #1BecBp_H (Perl)