for循环的结果不同?

时间:2015-04-01 07:03:48

标签: perl

我想像这样打印

    xxx
   xxxxx
  xxxxxxx
 xxxxxxxxx
xxxxxxxxxxx

我通过以下代码

来实现这一目标
$s = "x";
$z = 5;
$m = 1;

$m = $m+2,
$z--,
$c = " " x $z,
$st = $s x $m,
print "$c$st\n",
for(1..5);

我怀疑

当我在print函数之后使用递增和递减运算符时,它给出了不同的结果 脚本是

$c = " " x $z,
$st = $s x $m,
print "$c$st\n",
$m = $m+2,
$z--,
for(1..5);

结果是

     x
35    xxx
54   xxxxx
73  xxxxxxx
92 xxxxxxxxx

这里3 5 7 9由$m打印,5 4 3 2$z打印。 但是,我不是直接打印$m$z,而是为什么它会给$m$z值?它是如何工作的?

1 个答案:

答案 0 :(得分:3)

代码

$c = " " x $z,
$st = $s x $m,
print "$c$st\n",
$m = $m+2,
$z--,
for(1..5);

被解析为:

$c = " " x $z,
$st = $s x $m,
print ("$c$st\n", $m = $m+2, $z--),
for(1..5);

您可以使用括号强制进行不同的解析:

$c = " " x $z,
$st = $s x $m,
print ("$c$st\n"),
$m = $m+2,
$z--
for(1..5);

但我建议如下:

for(1..5) {
  $c = " " x $z;
  $st = $s x $m;
  print ("$c$st\n");
  $m = $m+2;
  $z--;
}

这样你就不会依赖任何可能咬你的运算符优先级。您将立即看到循环中包含哪些语句。 (我必须阅读你的初始代码三次才能最终得到它)