当时没有使用 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 访问该论坛
-~----------~----~----~----~------~----~------~--~---

回复