3

私は次の単純なPerlプログラムを実行しています。

use warnings;
use strict;

my %a = (b => "B", c => "C");

print "Enter b or c: ";

my $input = <STDIN>;

print "The letter you just entered is: ", $input, "\n";

my $d = $a{$input};

print ($d);

bと入力すると、警告付きの次の出力が表示されました。47行目は最後のステートメントの印刷($ d)です。

Enter b or c: b
The letter you just entered is: b

Use of uninitialized value $d in print at C:/Users/lzhang/workspace/Perl5byexample/exer5_3.pl line 47, <STDIN> line 1.

なぜこの警告が表示され、どうすれば修正できますか?

4

2 に答える 2

8

またはのほかに改行$input文字が含まれています。この文字をトリミングするように変更します。bc

my $input = <STDIN>;        # 1. $input is now "b\n" or "c\n"                             
chomp $input;               # 2. Get rid of new line character
                            #    $input is now "b" or "c"

print "the letter you just entered is: ", $input, "\n";
于 2013-03-26T22:12:44.357 に答える
3

これは、Enterキーを押すと、改行が追加されるためです。chompこれを取り除くために追加してみてください。

chomp(my $input = <STDIN>);

b\n値がハッシュ内の値にマップされておらず、初期化されていないため、この警告が表示されます$d

于 2013-03-26T22:12:48.493 に答える