繁体   English   中英

评估循环语法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM