Perl:迭代for循环中的值

时间:2015-10-24 22:47:26

标签: perl

print "Input value \n";
$line = <>;
chomp $line;
@val = $line;

for ($i = 1; $i <= 10; $i++){
  print -@val* $i;
}

我在这里有一个简单的for循环,用户输入我存储在@val中的值,我希望我的循环从1到10迭代并打印出-@val * $i的值。假设我的@val = 2,那么我应该看到输出:-2 -4 -6 - 8 ... -20。但我的实际输出是:-1 -2 ...... -10。出了什么问题?

2 个答案:

答案 0 :(得分:1)

正如我在评论中所写,我无法想象你通过将$line的值复制到数组@val来实现的目标。我还想提出其他一些要点

  • 你必须始终

    use strict;
    use warnings 'all';
    

    在所有Perl程序的开头。然后,您必须使用my声明所有变量,它会提醒您许多您可能忽略的简单错误

  • C风格的for循环在Perl中很少有用。通常最好迭代一个简单的列表。在您的程序中

    for my $i ( 1 .. 10 ) {
        ...
    }
    

所以把所有这些放在一起,你的程序就像这样

use strict;
use warnings 'all';

print "Input value\n";
my $val = <>;
chomp $val;

for my $i ( 1 .. 10 ) {
  print -$val * $i;
}

值得指出的是,当for循环的内容只是这样的单个语句时,您可以使用for作为语句修饰符并只写

print -$val * $_ for 1 .. 10;

答案 1 :(得分:-1)

问题在于您将值存储在数组中(@val)。当您在标量上下文中使用该数组时(for循环中的数学运算),您只需获得数组中的元素数。在您的情况下1.将@val更改为$val或直接使用$line