在打印功能中使用未初始化的值

时间:2013-03-26 22:10:30

标签: perl

我正在运行以下简单的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.

为什么我会收到此警告以及如何解决?

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分:3)

这是因为当您按Enter键时,它会添加换行符。尝试添加chomp以摆脱这种情况。

chomp(my $input = <STDIN>);

您收到该警告,因为值b\n未映射到哈希值中,因此$d未初始化。