+ -
当前位置:首页 → 问答吧 → 这种List赋值行为以前还真没注意到

这种List赋值行为以前还真没注意到

时间:2011-03-08

来源:互联网

$foo和$bar的值一样吗?
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. my $foo = (1, 2, 3);
  5. print "$foo\n";

  6. my $foo_1;
  7. my $foo_2;

  8. my $bar = (($foo_1, $foo_2) = (3, 2, 1));
  9. print "$bar\n";
复制代码

作者: iLRainyday   发布时间: 2011-03-08

我以为$bar会是2

作者: ziyunfei   发布时间: 2011-03-08

我直到刚才为止也以为是2

作者: iLRainyday   发布时间: 2011-03-08

上面那个是逗号表达式,下面这个是赋值吧??

这种写法太纠结了

作者: Cu_fans   发布时间: 2011-03-08

更纠结的是,这是perldata中的写法。原话是这么说的:



QUOTE:
List assignment in scalar context returns the number of elements produced by the expression on the right side of the assignment:

$x = (($foo,$bar) = (3,2,1));       # set $x to 3, not 2
  $x = (($foo,$bar) = f());           # set $x to f()'s return count

作者: iLRainyday   发布时间: 2011-03-08