作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个哈希数组。这是我的代码。 $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
关于arrays - 将散列推送到数组的这段 Perl 代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987429/
我是一名优秀的程序员,十分优秀!