+ -
当前位置:首页 → 问答吧 → 请教一条语句

请教一条语句

时间:2010-08-16

来源:互联网

  1. perl -le '@x=(1..100);@r=print for @x;print STDERR "@r"' > /dev/null
复制代码
之前仙子写的,为什么打印出来是1呢?
  1. my @x=(1..100);
  2. my @r = print for @x;

  3. print Dumper(\@r);
复制代码
这个结果是这样:
  1. $VAR1 = [];
复制代码

作者: yybmsrs   发布时间: 2010-08-16

print Dumper(\@r)  超出作用域

作者: toniz   发布时间: 2010-08-16

回复 toniz


    什么意思?

作者: yybmsrs   发布时间: 2010-08-16

my @x=(1..100);

for( @x){
my @r = print ;
}

print Dumper(\@r);

作者: toniz   发布时间: 2010-08-16

本帖最后由 黑色阳光_cu 于 2010-08-16 17:46 编辑
  1. #!/bin/env perl

  2. my $n = $_ foreach (1 .. 2);
  3. warn "\$n = $n";
  4. $m = $_ foreach (1 .. 2);
  5. warn "\$m = $m";

  6. my $l = 1 if (1);
  7. warn "\$l = $l";
  8. $k = 1 if (1);
  9. warn "\$k = $k";
复制代码
foreach的行为

作者: 黑色阳光_cu   发布时间: 2010-08-16

汗  明白了

my @r = print for @x; 看成了my @r = (print for @x);

作者: yybmsrs   发布时间: 2010-08-16

my $n = $_ foreach (1 .. 2);
warn "\$n = $n";


这个打印比较奇怪。$n没有超作用域,但值却是undef。

作者: 黑色阳光_cu   发布时间: 2010-08-16

回复 黑色阳光_cu


    my $n = $_ foreach (1 .. 2);这个相当于foreach (1 .. 2){my $n = $_ }吧?这样就超出了

作者: yybmsrs   发布时间: 2010-08-16

[quote]回复  黑色阳光_cu
  1. use strict;
  2. use warnings;

  3. my $n = $_ foreach (1 .. 2);
  4. warn "\$n = $n";

  5. my $m = 1 if (1);
  6. warn "\$m = $m";
复制代码
咋解释?

作者: 黑色阳光_cu   发布时间: 2010-08-16