我正在运行以下简单的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.
为什么我会收到此警告以及如何解决?
答案 0 :(得分:8)
您的$input
包含b
或c
以外的换行符号。修改它以修剪此字符:
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
未初始化。