gpt4 book ai didi

arrays - 将散列推送到数组的这段 Perl 代码有什么问题?

转载 作者:行者123 更新时间:2023-12-01 08:39:41 25 4
gpt4 key购买 nike

我正在尝试制作一个哈希数组。这是我的代码。 $1、$2 等是从正则表达式匹配的,我已经检查过它们是否存在。

更新: 修复了我最初的问题,但现在我遇到了一个问题,即当我将项目插入数组时,我的数组没有增长超过 1 的大小...

更新 2:这是一个范围问题,因为 @ACL 需要在循环外声明。谢谢大家!

while (<>) {
chomp;
my @ACLs = ();

#Accept ACLs
if($_ =~ /access-list\s+\d+\s+(deny|permit)\s+(ip|udp|tcp|icmp)\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(\s+eq (\d+))?/i){

my %rule = (
action => $1,
protocol => $2,
srcip => $3,
srcmask => $4,
destip => $5,
destmask => $6,
);
if($8){
$rule{"port"} = $8;
}
push @ACLs, \%rule;
print "Got an ACL rule. Current number of rules:" . @ACLs . "\n";

哈希数组似乎没有变大。

最佳答案

您正在插入 $rule,它不存在。您打算推送对 %rule 的引用:

push @ACLs, \%rule;

始终使用use strict; 开始你的程序;使用警告;。那会阻止您尝试推送 $rule

更新:在 Perl 中,数组只能包含标量。构建复杂数据结构的方式是使用哈希引用数组。示例:

my %hash0 = ( key0 => 1, key1 => 2 );
my %hash1 = ( key0 => 3, key1 => 4 );
my @array_of_hashes = ( \%hash0, \%hash1 );
# or: = ( { key0 => 1, key1 => 2 }, { key0 => 3, key1 => 4 ] );

print $array_of_hashes[0]{key1}; # prints 2
print $array_of_hashes[1]{key0}; # prints 3

请阅读Perl Data Structures Cookbook .

关于arrays - 将散列推送到数组的这段 Perl 代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com