作者DarkKiller (System hacked)
看板Perl
标题Re: [问题] 新手的一个小问题
时间Fri Jul 25 06:54:29 2008
※ 引述《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