用户定义的哈希搜索

时间:2016-02-15 16:51:35

标签: perl search hash user-defined

Perl新手。使用Windows 10 w / Padre IDE。我有一个问题一直困扰着我,这可能很简单,但我还没有在网上找到答案。

以下是我的搜索之前正在处理的代码。它读取一个list.txt文件,其中包含姓名和匹配的电话号码,因此我有两个哈希值(一个是name => number,第二个是number =>)。

my $search = "";

print "File name to be read in: ";
my $textFile = <>;

open FILE, $textFile;
my %hash;

while (<FILE>)
{
    chomp;
    my ($key, $val) = split / /;

    $hash{$key} .= exists $hash{$key} ? "$val" : $val;
}

close FILE;

open FILE, $textFile;
my %hash2;

while (<FILE>)
{
    chomp;
    my ($val, $key) = split / /;

    $hash2{$key} .= exists $hash2{$key} ? "$val" : $val;
}

close FILE;


print "(N) for name (#) for number search and (.) to exit: ";

$search = <>;

if ($search == "N")                #heres where we have the problem
{
        print "Enter name: ";  
        my $person = <>;           #user defined search looks for Bob Smith
        print $hash{$person};      #prints nothing
}

但是,当我进行非用户定义的搜索时,它的工作完善如下:

if ($search == "N")                
{
        #print "Enter name: ";  
        #my $person = <>;           
        print $hash{"Bob Smith"};      #prints Bob Smith's number
}

为了记录,我在屏幕上进行了$ search打印以确认在我首先输入名称时没有问题。当我用户定义搜索时,哈希不会上拉。当名称被特定地编码到散列函数中时,它每次都有效。

感谢你帮助了一个难倒的Perl Noobie。

1 个答案:

答案 0 :(得分:2)

你有一个尾随的换行符。在比较之前,您需要chomp

$search = <>;
chomp $search;

此外,您应该使用字符串比较eq

if ($search eq "N")