请检查此代码。得到错误
"Use of uninitialized value in print at 2.pl line 13, <STDIN> line 1."
代码:
#!/usr/bin/perl -w
my %questions = (
1 => "Java",
2 => "Python",
3 => "Perl",
4 => "C"
);
print "Enter a number between 1 and 4:";
my $selection = <STDIN>;
print $questions{$selection};
答案 0 :(得分:5)
从STDIN读取时需要删除换行符:
chomp(my $selection = <STDIN>);
原因是哈希键是唯一的,必须准确输入。 1\n
被视为与1
不同的密钥。
请注意,如果您使用过数组(因为您仍然使用数字),那么您就不会遇到此问题,因为1\n
会以静默方式转换为数字。
您可能想要输入完整性检查,如果没有别的,那么您可以捕获这样的错误:
print "You entered: '$selection'\n";
if (not defined $questions{$selection}) {
print "That is not a valid option\n";
}
在这种情况下,您可以获得输出:
You entered '1
'
That is not a valid option
(注意单引号字符串中的嵌入换行符)
对于将来的调试,您可能有兴趣了解Data::Dumper
这是一个核心模块,这是一种打印变量的简单方法,可以向您展示其中的内容:
use Data::Dumper;
print Dumper \@foo; # print reference to array
print Dumper $foo; # print scalar
这样输出如下:
$VAR1 = [
'foo',
2,
3
];
$VAR1 = 'foo';
$Data::Dumper::Useqq = 1
选项很适合显示隐藏的空白。在您的情况下,它会为您打印换行符:
$VAR1 = "1\n";