Perl技术问询:如何验证标准输入与哈希键值对是否匹配
修正你的Perl键值匹配代码
看来你的代码有几个小问题导致无法正确完成验证,我来帮你一步步梳理并修正:
主要问题分析
- 输入未处理换行符:通过
<STDIN>读取的内容会包含用户按下回车的换行符\n,直接和哈希里的值对比会因为额外字符导致匹配失败 - 变量名不完整:你代码里的
$pla...明显是输入截断了,应该是完整的$place变量 - 冗余的反向哈希:
%hash2完全没必要保留,直接用原哈希%hash就能完成验证逻辑,反向哈希反而会增加不必要的复杂度
修正后的完整代码
use 5.010; use strict; use warnings; my ($name, $place, %hash); %hash = ( Dominic => 'Melbourne', Stella => 'Beijing', Alex => 'Oakland', ); print "Enter name: "; $name = <STDIN>; chomp $name; # 去除输入末尾的换行符 print "Enter place: "; $place = <STDIN>; chomp $place; # 同样处理地点输入的换行符 # 核心验证逻辑:先确认名字是哈希的有效键,再对比对应的值是否匹配 if (exists $hash{$name} && $hash{$name} eq $place) { print "Correct\n"; } else { print "Incorrect\n"; }
关键修改说明
- 添加
chomp处理输入:确保用户输入的名字和地点不会携带换行符,彻底解决因格式问题导致的匹配失败 - 移除无用的
%hash2:直接利用原哈希的键值对应关系验证,逻辑更直观高效 - 完善条件判断:先用
exists $hash{$name}检查输入的名字是否存在于哈希的键中,再对比对应的值,避免出现未定义值的警告
内容的提问来源于stack exchange,提问作者Duomi
相关产品推荐
相关产品推荐

