2008年12月30日星期二

[PerlChina] Re: Question about if (@array)

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





--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina 论坛"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

没有评论: