在哈希上调试以下perl脚本

时间:2017-01-06 18:03:20

标签: perl hash

我正在研究一个在哈希中搜索名称的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";
  }   
}

1 个答案:

答案 0 :(得分:0)

作为一种良好做法,您应该在代码中使用strictwarnings 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)有关如何正确使用的一些解释,因为语法将根据您使用的变量(例如数组或哈希值)而改变。