這個問題所造成的 Bug 真的會很難抓.. 所以仔細了解一下 hash 的變數與實際驗證的結果整理如下:
#!/usr/bin/perl for ($i=0; $i<10; $i++) { #undef(%hash_test); #%hash_test={}; #%hash_test=(); $hash_test={}; print $i.'a:['.$hash_test->{'test'}."]\n"; $hash_test->{'test'}=time; sleep(1); print $i.'b:['.$hash_test->{'test'}."]\n"; }
必須要用 undef($hash_test), $hash_test={} 或 $hash_test=() 才可以真正清除掉, 否則內容還是存在.
#!/usr/bin/perl $hash_x->{'test'}='abc'; print("1:[".$hash_x->{'test'}."]\n"); change_hash('xyz'); print("2:[".$hash_x->{'test'}."]\n"); sub change_hash { local($p_value) = @_; local(%hash_x); $hash_x->{'test'}=$p_value; return; }
結果如下
[apache@rdtest01 develop]$ perl /tmp/t4.pl 1:[abc] 2:[xyz]