2012-11-01 23 views
2

嗨,我是新手的Perl学习这种简单的Perl程序简单的Perl添加程序出错了吗?

$inputline= <STDIN>; 
print "first input"; 
print($inputline); 
$inputline=<STDIN>; 
print "second input"; 
print($inputline); 
$sum= $inputline+$inputline; 
print"sum 1stinput and 2ndinput"; 
print($sum); 

输出

perl count.pl 
3 
4 
first input3 
second input4 
sum 1stinput and 2ndinput : 8 

为什么输出8,而不是为7?

回答

8

因为您在4时将$inputline添加到自身。

如果您想对两个输入进行求和,则必须使用两个变量进行求和,或者在变量改变之前进行求和。例如:

my $input1 = <>; 
my $input2 = <>; 
my $sum = $input1 + $input2; 
print "Sum: $sum"; 

或者

my $input = <>; 
my $sum = $input; 
$input = <>; 
$sum += $input; 
print "Sum: $sum"; 

你可以做简单的东西,如:

perl -nlwe '$sum += $_; print "Sum: $sum";' 

基本上是等价的:

use strict; 
use warnings; # always use these 

my $sum; 
while (<>) { # your input 
    $sum += $_; 
    print "Sum: $sum\n"; 
} 

中使用Ctrl- C或Ctrl-D跳出循环(Ctrl-Z在风中OWS)。

+0

更好的格式为:) –

+0

单线程对于初学者来说有点过头了,你不觉得吗?但不错的帖子! – simbabque

+0

@simbabque好吧,这并不复杂。 = P谢谢。 – TLP

4

Perl(或其他人)如何区分$ inputline和$ inputline?为第二个变量选择一个不同的名称。

5

您正在使用变量$ intputline两次。您第二次提到它时,它将覆盖以前的值。您需要使用唯一的变量名每个变量:

$inputline1= <STDIN>; 
print "first input"; 
print($inputline1); 
$inputline2=<STDIN>; 
print "second input"; 
print($inputline2); 
$sum= $inputline1+$inputline2; 
print"sum 1stinput and 2ndinput"; 
print($sum); 
1

总是和无故障包括在你的脚本的顶部以下编译:

use strict; 
use warnings; 

使用词法范围的变量(“我”) :

my $inputline= <STDIN>; 
print "first input"; 
print($inputline); 
my $inputline=<STDIN>; 
... 

运行,这将引发以下异常:

"my" variable $inputline masks earlier declaration in same scope at ... 

使用这些编译指示和“我的”可以帮助您避免脚本中的这些以及其他潜在的问题。

希望这会有所帮助!

+0

我使用V5.8.8。在包含使用严格和使用警告时,它会给我错误 全局符号“$ inputline”需要在count.pl第4行显式包名。 – learningMatlab

+2

@ user1792060这是因为使用strict时,需要声明变量。变量的真名是'$ main :: inputline',其中'main'是显式的包名。通常,使用词法变量,用'my'声明。例如。 '我的$ inputline'。 – TLP

+0

@TLP - 谢谢...优秀的回复。 – Kenosis