当时没有使用 use strict,呵呵。没有注意到,当时我还以为真有这个功能呢。 看来还忽悠了其他人。:)
2009/8/26 Li Changying <[email protected]> > 我晕,看到 undef my $x; 我还以为是你在用一个我没见过的新功能呢,原来你也没见 > 过啊. > > On Wed, Aug 26, 2009 at 11:55:48AM +0800, flw wrote: > > 在没有驾驭好闭包之前, > > 绝不要用嵌套的 sub,除非你明白自己在做什么。 > > > > 其实这和嵌套函数的关系也不大啦, > > 主要是 sub 里面不要用到 sub 以外的变量,所有的输入都走 sub 参数接口。 > > 除非你就是想把那个变量当全局变量用,那么可以建议你在当初就用 our 声明它,而不是 > > my > > > > 另外就是前面树昌兄所说, > > 使用use strict;编程,基本上就不会出现莫名其妙的问题了。 > > > > 我再补充一下: > > 用 Devel::Peek 可以很清楚地看到到底发生了什么。 > > > > D:\MoChou>cat ttt.pl > > use strict; > > use warnings; > > > > use Devel::Peek; > > > > my $x=3; > > in_a(); > > undef my $x; > > > > sub in_a > > { > > print Dump($x); > > $x++; > > print "in_a: $x\n"; > > } > > > > in_a(); > > in_a(); > > > > D:\MoChou>ttt > > "my" variable $x masks earlier declaration in same scope at > D:\MoChou\ttt.pl > > lin > > e 8. > > SV = NULL(0x0) at 0x37054 > > REFCNT = 2 > > FLAGS = (PADBUSY,PADMY) # 从这里可以清楚地看到,你的第二个 undef my $x > > 这个写法实际上是有问题的,前面的警告也说明 Perl 解释器检测到了这一点。不妨揣测 > > 一下:【也许你还没有学会如何使用 undef】,undef my $x 这种用法我真的是第一次见 > > 到。 > > in_a: 1 > > SV = PVIV(0x38e34) at 0x37054 > > REFCNT = 2 > > FLAGS = (PADBUSY,PADMY) > > IV = 1 > > PV = 0 > > in_a: 1 > > SV = PVIV(0x38e34) at 0x37054 > > REFCNT = 2 > > FLAGS = (PADBUSY,PADMY,IOK,POK,pIOK,pPOK) > > IV = 1 > > PV = 0x1821b1c "1"\0 > > CUR = 1 > > LEN = 4 > > in_a: 2 > > > > D:\MoChou> > > > > > > > -- > > Thanks & Regards > > Changying Li > > > > > > > -- #!your 3y3 http://blog.csdn.net/wss12cn --~--~---------~--~----~------------~-------~--~----~ 您收到此信息是由于您订阅了 Google 论坛“PerlChina Mongers 讨论组”论坛。 要在此论坛发帖,请发电子邮件到 [email protected] 要退订此论坛,请发邮件至 [email protected] 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛 -~----------~----~----~----~------~----~------~--~---
