我有需要解析的具有源IP地址和目标IP地址的日志。在遍历日志时,我希望将源IP和目标IP存储为一对值。
我试了个哈希,但没成功。下面是这个问题的一个例子:
%sessionIPs = ();
$sessionIPs{"1.1.1.1"} = "2.2.2.2";
$sessionIPs{"1.1.1.2"} = "3.3.3.3";
$sessionIPs{"1.1.1.3"} = "4.4.4.4";
$sessionIPs{"1.1.1.1"} = "5.5.5.5";
$sessionIPs{"3.3.3.3"} = "6.6.6.6";
foreach my $key ( keys %sessionIPs )
{
print "key: $key, value: $sessionIPs{$key}\n";
}
#prints
key: 1.1.1.3, value: 4.4.4.4
key: 1.1.1.2, value: 3.3.3.3
key: 1.1.1.1, value: 5.5.5.5
key: 3.3.3.3, value: 6.6.6.6如您所知,我丢失了1.1.1.1源IP和2.2.2.2目标IP密钥/值对,因为散列需要唯一的密钥。我需要一个不禁止重复键的散列或其他类型的对象。
perl中的哪个对象允许我存储这类相关数据?
发布于 2016-12-08 02:35:39
你在正确的轨道上,我认为哈希是一个很好的方法。但是,与其将标量(单个值)存储在哈希中,还可以在哈希中存储一个值数组:
%sessionIPs = {};
@{$sessionIPs{"1.1.1.1"}} = ("2.2.2.2", "5.5.5.5");
...当然,您可能希望以编程方式添加目的地,这样就可以推送新的值:
push @{$sessionIPs{"1.1.1.1"}}, "6.6.6.6";或者,更笼统地说:
push @{$sessionIPs{$source}}, $destination;一个完整的例子:
%sessionIPs = ();
push @{ $sessionIPs{"1.1.1.1"}}, "2.2.2.2";
push @{ $sessionIPs{"1.1.1.1"}}, "3.3.3.3";
push @{ $sessionIPs{"1.1.1.1"}}, "4.4.4.4";
push @{ $sessionIPs{"5.5.5.5"}}, "6.6.6.6";
push @{ $sessionIPs{"5.5.5.5"}}, "7.7.7.7";
foreach my $source ( keys %sessionIPs ) {
print "source: $source\n";
foreach my $dest ( @{$sessionIPs{$source}} ) {
print " dest: $dest\n";
}
}提供输出:
source: 1.1.1.1
dest: 2.2.2.2
dest: 3.3.3.3
dest: 4.4.4.4
source: 5.5.5.5
dest: 6.6.6.6
dest: 7.7.7.7https://stackoverflow.com/questions/41030695
复制相似问题