如果要让数组 清空, 用 @data = () ;
2008/12/30 cnhack TNT <cnhacktnt@gmail.com>
1. if (@array) 和 if ( scalar(@array) ) 在这里是一样的, scalar 是强制标量上下文环境,而前者已经是标量上下文环境了,所以他们等同
2. delete 删除一个哈希中的键值对,或者某个数组里的元素(或数组的某一段元素,所谓的slice), undef 可以用以清空 perl 中的变量(包括标量,数组,哈希等)
但是注意:
@array = undef;
if(@array) { print 'true' };
这里的 if 判断会得到真,因为 undef 在这里成了数组 @array 的第一个元素,它是个空值。
你可以命令行这样运行看看:
perl -MData::Dumper -le ' @a=(undef,undef); print Dumper \@a'
在标量上下文中 @array 返回自身元素的个数, 所以 if(@array) 中括号内表达式的结果会为 1,当然是真。2008/12/30 Ray <chenrano2002@gmail.com>
Hi, all
Would you explain the output of the following perl codes?
question 1:
Is the sentence "if (@array) " same as "if ( scalar(@array) )"??
question 2:
what's the difference of "undef $variable " and "delete $variable"??
Thanks,
Ray
-------------------------------------------
code----------------------------------
#!/usr/bin/perl
use strict;
use warnings;
my @host = ();
my @host1 = ('fdfd', 'fdfdfd');
my @host2 = undef;
if ( @host ) {
print "host ok\n";
} else {
print "host fail\n";
}
if ( @host1 ) {
print "host1 ok\n";
} else {
print "host1 fail\n";
}
if ( @host2 ) {
print "host2 ok\n";
} else {
print "host2 fail\n";
}
-------------------------------------------
code----------------------------------
and the output is :
host fail
host1 ok
host2 ok
--
Yours Sincerely
Zeng Hong
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina 论坛"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---
没有评论:
发表评论