+ -
当前位置:首页 → 问答吧 → 证明空列表在 SCALAR 上下文返回 undef

证明空列表在 SCALAR 上下文返回 undef

时间:2011-03-01

来源:互联网

  1. #!/bin/env perl

  2. use strict;
  3. no warnings;

  4. my $i  = (1, 2, 3, ());
  5. my $j  = (1, 2, 3, );
  6. my $k = (1, 2, 3, func());

  7. print "\$i = $i\n";
  8. print "\$j = $j\n";
  9. print "\$k = $k\n";

  10. my @ar = (1, 2, 3, func());
  11. print "Size of \@ar: ", scalar(@ar), "\n";

  12. my @ar2 = (1, 2, 3, func2());
  13. print "Size of \@ar2: ", scalar(@ar2), "\n";

  14. sub func
  15. {
  16.         return;
  17. }

  18. sub func2
  19. {
  20.         return undef;
  21. }
复制代码

作者: 黑色阳光_cu   发布时间: 2011-03-01

错了。

建议学学 C 语言,看看 Perl 解释器的实现。

perldoc -f wantarray
perldoc -f return

上面两段文档可以解释除 my $i = 这一行之外的其余所有代码。

这一行代码的解释在下面:
  1. D:\MoChou>perl -MO=Deparse -e "$i = (1,2,3,())"
  2. $i = ('???', '???', '???', ());
  3. -e syntax OK

  4. D:\MoChou>
复制代码

作者: flw   发布时间: 2011-03-01

回复 黑色阳光_cu

证明这个,只需要一行就够了:
  1. perl -E 'my $i = (); say "defined" if defined $i'
复制代码

作者: Monox   发布时间: 2011-03-01



QUOTE:
错了。

建议学学 C 语言,看看 Perl 解释器的实现。

perldoc -f wantarray
perldoc -f return

上 ...
flw 发表于 2011-03-01 22:49






我主要就是测试 my $i  = (1, 2, 3, ()) 其它都是为了对比而已。

作者: 黑色阳光_cu   发布时间: 2011-03-02