====== 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}}