0

您如何将一个哈希的键与另一个哈希的值进行比较?这是我的哈希的输出。我只需要返回布尔输出。

(我的代码现在有点乱,所以请原谅我没有在这里发布。我只需要逻辑,我会尝试进一步整合它。)

    $VAR1 = {
      '5555' => [
                    '13570'
                  ]
    };
    $VAR1 = {
      '13570' => [
                   '[04/Jun/2013:15:06:13'
                 ]
            };

谢谢。

4

3 回答 3

1

$VAR1被分配了两次。我想这是一个错字。你真的想检查一个散列是否包含给定的键,尽管这个键eq与另一个散列中的值相同( )?

您可以使用exists,例如if (exists $hash{$key}) {...}。有关 和 之间的区别definedexists请参阅存在和定义之间有什么区别?

顺便说一句,当您声明匿名哈希{ }和匿名数组时[ ],在获取实际内容之前需要取消引用;否则,您只需使用引用(如 c 语言中的指针)。

于 2013-06-12T02:54:36.043 回答
0

让您失望的是您的哈希值不是实际,而是[ ... ]指向包含实际数据的单元素数组的数组引用(如 Data::Dumper 输出中所示)。所以你需要取消引用它们并从结果数组中获取第一个元素:

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

my %hash1 = ('5555' => [ '13570' ]);
my %hash2 = ('13570' => [ '[04/Jun/2013:15:06:13' ]);

for (keys %hash1) {
  my $first_key = $_;
  my $second_key = $hash1{$first_key}[0];
  say "$first_key -> $second_key -> $hash2{$second_key}[0]";
}

输出:

5555 -> 13570 -> [04/Jun/2013:15:06:13

编辑: 备用代码检查每个条目中的所有值%hash1并显示每个条目中的所有对应值%hash2

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

my %hash1 = ('5555' => [ '13570', '8675309' ]);
my %hash2 = (
  '13570' => [ '[04/Jun/2013:15:06:13' ],
  8675309 => [ 'Jenny', 'I got your number' ],
);


for (keys %hash1) {
  my $first_key = $_;
  for my $second_key ( @{$hash1{$first_key}} ) {
    if (exists $hash2{$second_key}) {
      say "$first_key -> $second_key ->";
      say "\t$_" for @{$hash2{$second_key}};
    }
  } 
}

输出:

5555 -> 13570 ->
    [04/Jun/2013:15:06:13
5555 -> 8675309 ->
    Jenny
    I got your number
于 2013-06-12T07:55:26.410 回答
-3

我将此作为如何将非加密值与加密值进行比较。不过我可能是错的。

如果是这种情况...

if HASH_VALUE(nonEncrypted) is equal to encryptedValue
    do something
else
    do something else
于 2013-06-11T21:07:38.007 回答