作者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