我正在研究一个在哈希中搜索名称的perl脚本,返回该人的电话号码。就像在哈希中查找键并返回找到的键的值一样。否则它将打印"名称未在书中找到"。当我提供哈希中存在的值时,我无法访问元素。修改代码需要什么?
loc()
我得到的输出是:
$namesearch="";
%phoneNumbers={"ramu"=>123,"rishi"=>456,"sai"=>789};
while($namesearch ne "END")
{
print("Enter name to search:\n");
$namesearch=<STDIN>;
chomp $namesearch;
if(exists($phoneNumbers{$namesearch}))
{
print "The phone Number of $namesearch is: ($phoneNumbers{$namesearch})\n";
}
elsif($namesearch eq "END")
{
last;
}
else
{
print "Name not found in book\n";
}
}
答案 0 :(得分:0)
作为一种良好做法,您应该在代码中使用strict和warnings pragma,以便于调试。
<强>严格强>
strict pragma禁用某些可能的Perl表达式 表现出乎意料或难以调试,将它们变成了 错误。此pragma的效果仅限于当前文件或 范围块。
<强>警告强>
这个pragma就像严格的pragma一样。这意味着 警告编译指示的范围仅限于封闭块。它也是 意味着pragma设置不会泄漏文件(通过使用, 要求或做)。这允许作者独立地定义学位 警告检查将应用于他们的模块。
我对您的代码进行了一些更改,并且您应该采取一些措施使其正常工作:
use strict;
use warnings;
use diagnostics;
#Always declare your variables
my $namesearch = "";
#Change your hash ref to a simple hash
my %phoneNumbers = ( "ramu" => 123, "rishi" => 456, "sai" => 789 );
while ( $namesearch ne "END" ) {
print("Enter name to search:\n");
$namesearch = <STDIN>;
chomp $namesearch;
if ( exists( $phoneNumbers{$namesearch} ) ) {
print
"The phone Number of $namesearch is: ($phoneNumbers{$namesearch})\n";
}
elsif ( $namesearch eq "END" ) {
last;
}
else {
print "Name not found in book\n";
}
}
同时检查perldoc有关引用的信息(perlreftut)有关如何正确使用的一些解释,因为语法将根据您使用的变量(例如数组或哈希值)而改变。