如何将一个哈希的密钥与其他哈希的值进行比较?这是我的哈希的输出。我只需要返回布尔输出。
(我的代码现在很乱,所以请原谅我没有在这里发帖。我只需要逻辑,我会尝试进一步合并它。)
$VAR1 = {
'5555' => [
'13570'
]
};
$VAR1 = {
'13570' => [
'[04/Jun/2013:15:06:13'
]
};
感谢。
答案 0 :(得分:1)
$VAR1
被分配两次。我想这是一个错字。你真的想检查一个哈希是否包含一个给定的密钥,虽然这个密钥是相同的(eq
),并且在另一个哈希中有一个值?
您可以使用exists
,例如if (exists $hash{$key}) {...}
。有关defined
和exists
之间的差异,请参阅What's the difference between exists and defined?
BTW,当您使用{ }
声明匿名哈希和使用[ ]
声明匿名数组时,需要在获取实际内容之前取消引用;否则你只需使用引用(如c语言中的指针)。
答案 1 :(得分: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
答案 2 :(得分:-3)
我这样做是为了将非加密值与加密值进行比较。我可能错了。
如果是这种情况......
if HASH_VALUE(nonEncrypted) is equal to encryptedValue
do something
else
do something else