2010-04-22 122 views
6

我知道这是可能的,但我在语法上留下了一个空白。你如何做一些类似于以下的事情作为条件。 5.8,所以没有开关选项:如何将结果存储到变量并在条件中检查结果?

while (calculate_result() != 1) { 
    my $result = calculate_result(); 
    print "Result is $result\n"; 
} 

而只是类似于:

while (my $result = calculate_result() != 1) { 
    print "Result is $result\n"; 
} 

回答

9

您需要添加括号指定优先级为!==更高的优先级:

while ((my $result = calculate_result()) != 1) { 
    print "Result is $result\n"; 
} 
+0

就是这样。忘记了=返回了分配的值。谢谢! – Oesor 2010-04-22 21:28:24

0

怎么了:

$_ = 1; 
sub foo { 
    return $_++; 
} 
while ((my $t = foo()) < 5) 
{ 
    print $t; 
} 

结果1234

2

kemp对于优先顺序有正确答案。我只是补充说,在循环条件下执行包含赋值和比较的复杂表达式可能会使代码非常快速地变得难看且不可读。

我会写这样的:

while (my $result = calculate_result()) { 
    last if $result == 1; 
    print "Result is $result\n"; 
} 
+2

这与OP有不同的含义。如果'$ result'为false,那么OP仍然会执行该块。 – mob 2010-04-22 20:51:02

+0

是的,这是真的使用DateTime的比较(),这是用于覆盖<=>并返回-1,0或1的子。我需要执行代码时,它是-1或0,而不是1时,并采取不同的路径当-1和0. while($ result = compare($ time_a,$ time_b))将永远不会执行,基本上。 – Oesor 2010-04-22 21:32:45

0

你是关闭...

while ((my $result = calculate_result()) != 1) { 
    print "Result is $result\n"; 
} 
相关问题