2017-01-06 9 views
0

ハッシュで名前を検索するperlスクリプトで作業していますが、その人の電話番号が返されます。ちょうどハッシュのキーを探して、見つかったキーの値を返します。それ以外の場合は、 "bookにnameが見つかりません"と表示されます。私はハッシュに存在する値を与えているときに要素にアクセスできません。コードを変更するには何が必要ですか?以下のperlスクリプトのハッシュでのデバッグ

$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"; 
    } 
} 

私は取得しています出力は次のようになります。

​​
+3

常に 'use strict;'と 'use warnings 'all';'です。 "%phoneNumbers = {...};'という行を指しています) – ThisSuitIsBlackNot

+0

コンパイルエラーが表示されています。 –

答えて

0

良いプラクティスとして、デバッグが容易になりますし、あなたのコード内でstrictwarningsプラグマを使用する必要があります。

厳格

strictプラグマは 予期しない動作やデバッグが困難な、 エラーにそれらを回すことができ、特定のPerlの表現を無効にします。このプラグマの効果は、現在のファイルまたは スコープブロックに限定されています。

警告

このプラグマはちょうどstrictプラグマのように動作します。これは、警告プラグマの スコープが囲むブロックに限定されていることを意味します。また、 は、プラグマの設定がファイル間で漏れないことを意味します(使用、 requireまたはdoを使用)。これにより、著者は自らのモジュールに適用される警告チェックの度合いを別個に定義することができます( )。

私はあなたのコード内のいくつかの変更を行なったし、あなたはそれが動作するためにやるべきことがいくつかあります。

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"; 
    } 
} 

も参照(perlreftut)についてはperldocにてご確認方法については、いくつかの説明があります。配列やハッシュのような変数をどのように使用しているかによって構文が変わるため、正しく使用することができます。

+0

グローバルな '$ namesearch'の代わりに、ローカライズすることをお勧めします:' while(1){my $ namesearch = ; ...;最後に$ namesearch eq 'END'; ...} ' – stevieb

関連する問題