Re: [問題] 同一個key值下push問題
※ 引述《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
03/19 08:37, 2F
推
03/19 14:29, , 3F
03/19 14:29, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章