0

ハッシュリファレンスでキーと値を検索すると、true または false を返す必要がある次の関数があります。私は何かが欠けていると確信していますが、何ですか?

検索するキー値文字列が見つかった場合、関数 shoudl は true または false を返します。

#!/usr/bin/perl
use warnings;
use strict;
my $structure = {
    Key1 => {
           Key4 => "findme",
           Key5 => 9,
           Key6 => 10,
         },
    Key2 => {
           Key7 => "abc",
           Key8 => 9,
             },
 };

sub lookup_key_value
{
    # Arguments are a hash ref and a list of keys to find
    my($hash,$findkey, $findvalue) = @_;

        # Loop over the keys in the hash
        foreach my $hashkey ( keys %{$hash})
        {

            # Get the value for the current key
            my $value = $hash->{$hashkey};

            # See if the value is a hash reference
            if (ref($value) eq 'HASH')
            {
                    # If it is call this function for that hash
                    &lookup_key_value($value,$findkey,$findvalue);
            }

            if ( ($findkey =~ m/^$hashkey$/) && ( $value =~ m/^$findvalue$/) )
            {
                print "$findkey = $hashkey, $value = $findvalue\n";
                return (0);
            }
        }
        return (1);
}

if ( &lookup_key_value($structure,"Key7","abcX") )
{
    print "FOUND !\n";
} else {
    print "MISSING !\n";
}
4

2 に答える 2

1
  1. これ$findkey =~ m/^$hashkey$/$hashkey =~ m/^$findkey$/
  2. 一致するキー/値のペアが見つかった場合は 0 を返し、Perl では false に変換され、ペアが見つからない場合は 1 (true) を返します。なんで?このロジックを逆にします。false を返すにはreturn;、引数なしで simple を使用します。
于 2016-04-02T21:45:31.000 に答える