Re: [問題] 新手的一個小問題
※ 引述《izuk (被討厭了 >0<)》之銘言:
: 我是從Perl cookbook上抄下來的
: 想請問
: $seen = ();
$sess 是 scalar,後面是 array,所以會拿 array 最後面的一個值,這邊
剛好是空的 array,所以應該是 undef。
不過依照你下面的範例,這邊應該是用 %seen = {}; 表示 hash...
: 和
: @uniq = ();
這邊是讓 @uniq 成為一個空的 array。
: 這兩句的作用和意思是什麼啊 @@
: 在書上沒翻到 =.=
: -----------------------
: $seen = ();
: @uniq = ();
: foreach $item (@list) {
: unless ($seen{$item})
: $seen{$item} = 1;
: push(@uniq, $item);
: }
: }
這個寫法有一個不太好的習慣在裡面,首先是 $sess{$item} 不論是 0 或是
undef,內部的設值指令都會跑到。這可能不是你要的結果。
如果是想要把 @list 裡的東西拿到 %seen 裡檢查「是否存在」,用 defined
判斷會比較好,也就是 unless (defined $seen{$item})。
另外,雖然 unless 可以當作 if not 來用,但我很少看到有人真的這樣用,
第一眼看到時腦袋通常轉不太過來。
再來是程式可讀性的部份,這段 code 我會建議翻寫成「從 @list 裡撈不存在
於 $seen{$key} 的 element」:
@uniq = grep {not defined $seen{$_}} @list;
希望這些對你有幫助。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.54.119
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章