[英]Eval loop syntax
我正在针对代码战练习我的Perl。
我在先前的任务提要Eval中看到某人创建了一个数组。
@a = map eval s/\B/*/gr, 0 .. 10000;
但是,当我尝试提供评估清单时,它给了我一个错误
my ($a,$b,$c)=(1,2,3);
return 1 if eval "$a$_$b==$c", for qw "+ - / *";
此行也无法按预期工作。
my ($a, $b, $c) = @_;
@aa=map eval "$a $_ $b", for qw "+ - / *";
但是,这有效
my ($a,$b,$c)=(1,2,3);
for (qw "+ - / *")
{
return 1 if eval "$a$_$b==$c";
}
有人可以解释这两种陈述之间的区别吗?
谢谢
您误解了第一个示例的功能。
my @a = map eval s/\B/*/gr, 0 .. 10000;
这不会将列表传递给eval
。 eval s/...//
是要以非块形式map
的参数。 当添加括号时,这一点变得更加清晰。
my @a = map( eval( s/\B/*/gr ), 0 .. 10000 );
它将为每个数字调用eval
语句,并返回结果列表,该结果列表分配给@a
。 该代码每隔一个数字添加一个星号,并生成结果字符串的列表。
在此代码中,您再次误解了map
作用。
my ($a, $b, $c) = @_;
@aa=map eval "$a $_ $b", for qw "+ - / *";
该map
基本上是就地for
循环。 添加一个后缀 for
没有做任何有用的东西在这里。 map
将已经遍历列表中的所有元素。 在这种情况下,列表为qw//
运算符创建的"+", "-", "/", "*"
。
摆脱for
,它将起作用。
my ( $x, $y ) = ( 1, 2 );
my @results = map eval "$x $_ $y", qw "+ - / *";
结果是:
3,
-1,
0.5,
2
我建议你在map
上阅读 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.