Perl 将一个哈希键与另一个哈希键进行比较';s值

Perl 将一个哈希键与另一个哈希键进行比较';s值,perl,hash,Perl,Hash,如何比较一个散列的键和另一个散列的值?这是我散列的输出。我只需要返回布尔输出 (我的代码现在有点乱,所以请原谅我没有在这里发布。我只需要逻辑,我会尝试进一步整合它。) 谢谢。我把它理解为如何比较非加密值和加密值。不过我可能错了 如果是这样的话 if HASH_VALUE(nonEncrypted) is equal to encryptedValue do something else do something else $VAR1分配两次。我想这是个打字错误。确实要检查哈希是

如何比较一个散列的键和另一个散列的值?这是我散列的输出。我只需要返回布尔输出

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


谢谢。

我把它理解为如何比较非加密值和加密值。不过我可能错了

如果是这样的话

if HASH_VALUE(nonEncrypted) is equal to encryptedValue
    do something
else
    do something else

$VAR1
分配两次。我想这是个打字错误。确实要检查哈希是否包含给定的键,尽管该键与另一个哈希中的值相同(
eq

您可以使用
exists
,例如,
if(exists$hash{$key}){…}
。有关定义的
与存在的
之间的差异,请参阅


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

这里让您感到不舒服的是,哈希值不是实际值,而是数组引用(如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
5555 -> 13570 ->
    [04/Jun/2013:15:06:13
5555 -> 8675309 ->
    Jenny
    I got your number
编辑:替换代码以检查每个
%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 -> 13570 ->
    [04/Jun/2013:15:06:13
5555 -> 8675309 ->
    Jenny
    I got your number

defined$VAR1->{$VAR1->{'5555'}}
应该告诉您$VAR1中是否存在与$VAR1的键'5555'的值匹配的键。。。。对于VAR1的不同定义。。。。。8/我试过,| if(defined$hash1{$key2})|,这里key2指的是第二个散列。你能进一步解释一下吗?这与问题无关。这个问题是关于Perl数据类型的“散列”(在其他语言中称为“散列表”、“关联数组”或“字典”),不是加密哈希。问题是关于Perl数据结构。这个答案是关于单向散列函数的。请删除它。不,这不是打字错误,这是使用Data::Dumper显示哈希的结果。Data::Dumper无法访问变量的实际名称,因此它将所有变量都称为
$VAR1
。感谢Dave的响应,这正是我要查找的,但是您知道第一个哈希可能包含多个值,因此需要grep来表示存在。@JohnRein请参阅我在中编辑的用于处理数组中多个值的备用版本。哇,这太好了。请忽略散列2中的第二个键,因为这两个散列之间不常见。我们只需要firstkey来比较hash1的值。为什么不为我的$first_key(…){…}
编写它呢?