====== Perl 的 hash 變數相關實務驗證 ====== 這個問題所造成的 Bug 真的會很難抓.. 所以仔細了解一下 hash 的變數與實際驗證的結果整理如下: * 清除 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=() 才可以真正清除掉, 否則內容還是存在. **清除 array 的語法剛好相反** * @arr_t=(); 可以正確清除掉 arr_t 的陣列內容 * $arr_t=(); 無法清除掉 arr_t 的陣列內容 * hash 變數並不會因為在 sub 內的 local 宣告就回重新產生一份在 sub 內專屬的變數, 而是整體的變數 #!/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] {{tag>perl hash}}