2

こんにちは、私はこの単純な 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

出力が 7 ではなく 8 なのはなぜですか?

4

4 に答える 4

8

$inputlineであるときに自分自身に追加するからです4

2つの入力を合計する場合は、2つの変数を使用して行うか、変数が変更される前に加算を行う必要があります。例えば:

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を使用して、ループから抜け出します(WindowsではCtrl-Z)。

于 2012-11-01T18:09:54.360 に答える
5

変数$intputlineを2回使用しています。2回目に参照すると、前の値が上書きされます。変数ごとに一意の変数名を使用する必要があります。

$inputline1= <STDIN>;
print "first input";
print( $inputline1); 
$inputline2=<STDIN>;
print "second input";
print($inputline2);
$sum= $inputline1+$inputline2;
print"sum 1stinput and 2ndinput";
print($sum);
于 2012-11-01T18:11:02.473 に答える
4

Perl(または他の誰か)は$inputlineと$inputlineをどのように区別できますか?2番目の変数に別の名前を選択します。

于 2012-11-01T18:10:20.133 に答える
1

次のプラグマを必ずスクリプトの先頭に含めてください。

use strict;
use warnings;

レキシカル スコープの変数 ("my") を使用します。

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

これを実行すると、次の例外が発生します。

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

これらのプラグマと "my" を使用すると、スクリプト内でこの問題やその他の潜在的に問題のある領域を回避するのに役立ちます。

お役に立てれば!

于 2012-11-01T18:20:38.213 に答える