首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PERL中对多到多关系进行编码?

如何在PERL中对多到多关系进行编码?
EN

Stack Overflow用户
提问于 2016-12-08 02:18:16
回答 1查看 148关注 0票数 0

我有需要解析的具有源IP地址和目标IP地址的日志。在遍历日志时,我希望将源IP和目标IP存储为一对值。

我试了个哈希,但没成功。下面是这个问题的一个例子:

代码语言:javascript
复制
%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中的哪个对象允许我存储这类相关数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 02:35:39

你在正确的轨道上,我认为哈希是一个很好的方法。但是,与其将标量(单个值)存储在哈希中,还可以在哈希中存储一个值数组:

代码语言:javascript
复制
%sessionIPs = {};
@{$sessionIPs{"1.1.1.1"}} = ("2.2.2.2", "5.5.5.5");
...

当然,您可能希望以编程方式添加目的地,这样就可以推送新的值:

代码语言:javascript
复制
push @{$sessionIPs{"1.1.1.1"}}, "6.6.6.6";

或者,更笼统地说:

代码语言:javascript
复制
push @{$sessionIPs{$source}}, $destination;

一个完整的例子:

代码语言:javascript
复制
%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";
        }
}

提供输出:

代码语言:javascript
复制
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.7
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41030695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档