请问数组清空后,作用域会变化吗?

请问数组清空后,作用域会变化吗?

比如:
local @a;

然后执行清空操作,
$#a=-1;
@a=();
undef @a;

如上这些操作会导致@a的作用域还是local的吗?
多谢~

我在试后面两种情况的时候,在执行 if defined @a 的时候,发现为假;也就是说数组@a没有定义,如果这样那么它的作用域就没有了。。
变量都销毁了,不存在什么作用域了吧
,如果这样的话,就不叫清空操作了,应该叫销毁~
个人认为其作用域还是继续存在,只不过里面没有东西罢了


use strict;
use warnings;

my @okk = (0 .. 5);
{
        my @okk = (0 .. 5);
        undef @okk;
        @okk = (6 .. 10);
        print @okk;
}
print @okk;


QUOTE:
原帖由 sotol 于 2008-1-29 09:38 发表
个人认为其作用域还是继续存在,只不过里面没有东西罢了


use strict;
use warnings;

my @okk = (0 .. 5);
{
        my @okk = (0 .. 5);
        undef  ...

这里输出的是{}里面undef之后重新定义的@okk和{}之外的@okk,并不是{}里面undef了的@okk,@array = ();不仅清空数组,同时还释放系统内存,销毁数组。

谢楼上答复,那要声明一个新的数组,并初始化置空它,该怎么做呢?


QUOTE:
原帖由 maxxfire 于 2008-1-29 11:13 发表
谢楼上答复,那要声明一个新的数组,并初始化置空它,该怎么做呢?

my @array;
其实@array = ();也可以初始化,里面的值都是undef。

声明一个新数组,本来就是空的,又咋叫置空他
比如:

[Copy to clipboard] [ - ]
CODE:
use strict;
{my @aa=(2,3);
undef @aa;
@aa=(4,5)}
print @aa;

上面有个block,里面申明一个数组,然后置空他,然后再赋值,不会报错
因为@aa申明在block里面,而且是my
而出了括号,你再print,他就报错,因为在文件作用域不存在@aa

所以,undef并不会改变作用域


QUOTE:
原帖由 FinalBSD 于 2008-1-29 10:15 发表

这里输出的是{}里面undef之后重新定义的@okk和{}之外的@okk,并不是{}里面undef了的@okk,@array = ();不仅清空数组,同时还释放系统内存,销毁数组。

那在{}里undef前后,\@okk的值是不是始终存在并且没有改变呢?
恩,作用域是存在的,只不过没值。