+ -
当前位置:首页 → 问答吧 → 关于Perl的undef

关于Perl的undef

时间:2010-12-21

来源:互联网

undef函数的使用:undef EXPR。个人理解是清空EXPR占用的内存的内容。比如:曾在Win32::OLE的Excel使用例子的末尾见到“undef $app_xls”,还是不理解该函数在什么情况下要用到??原来认为对变量而言系统会在函数结束后自动清空变量所占的内存的呀,实在不懂此处为何要手动undef……

作者: lion7beckham   发布时间: 2010-12-21

贴下例子的出处看看。

作者: iambic   发布时间: 2010-12-21

undef实际上可以理解为是变量的一种状态,就跟C/C++中的NULL是一样的。一般情况下,在语言中,以引用或者指针保存变量的情况下比较有用。例如:C中的指针,当将一个具有实际值的指针置为NULL之后,就表示,该指针原来所指向的内容不再使用了,而且,该指针也不在指向任何内容的一种状态;Perl中的变量,简单的说,是使用引用计数器实现的一种变量,所以,在Perl中,你可以从一个函数返回一个看上去像是C中的局部变量的引用:
Perl code

sub func
{
   my $a=1;
   return \$a;
}


所以,当对一个标量、数组、哈希等置为undef的时候,实际上也表示该变量所关联的内存不再使用了。但究竟需不需要释放内存,还要看引用计数和undef的作用对象。
Perl code

my $aref=func();
my $a=$$aref;
print("aref=$$aref\n");
undef $aref;
print("a=$a\n");
undef $a;
print("a=$a\n");


aref=1
a=1
a=

当程序中对一个变量或者对象的引用计数器为0的时候,该变量或者对象所使用的内存将被释放。

作者: fibbery   发布时间: 2010-12-21