我试图从数组中拆分字符串并用perl将其保存回来,但它不能很好地拆分。 我将数据存储到数组@nameInt。 数据:
ge-1/1/2.552
ge-1/1/2.561
ge-1/1/2.562
ge-1/1/2.580
ge-1/1/2.582
ge-1/1/2.590
ge-1/1/2.592
ge-1/1/2.640
ge-1/1/2.642
ge-1/1/2.644
ge-1/1/2.650
代码:
foreach my $interface(@nameInt){
@sepInt = split /[.]/, $interface;
}
我尝试拆分并保存到新数组(@sepInt),但是当我尝试打印出来时,显示错误
print "name interface: ".$sepInt[0][0]." | vlan id: ".$sepInt[0][1];
Can't use string ("ge-1/1/5") as an ARRAY ref while "strict refs" in use
预期:
name interface: ge-1/1/2 | vlan id: 552
name interface: ge-1/1/2 | vlan id: 561
name interface: ge-1/1/2 | vlan id: 562
...
so on
答案 0 :(得分:4)
欢迎使用Perl中的高阶函数!
map {split /[.]/, $_} @nameInt
内置函数map
可帮助您越过树木,以便可以看到森林。换句话说,它可以帮助您将注意力集中在您想要做的事情上,而不是像$interface
和@sepInt
这样的中间记账值。
......而且,嗯,也许你想要的是一对元素列表。
map {[split /[.]/, $_]} @nameInt
答案 1 :(得分:4)
看到你正在创建一个数组,而不是一个数组数组,我想你要做的就是:
my @array = qw (ge-1/1/2.552 ge-1/1/2.561 ge-1/1/2.562 ge-1/1/2.580 ge-1/1/2.582 ge-1/1/2.590 ge-1/1/2.592 ge-1/1/2.640 ge-1/1/2.642 ge-1/1/2.644 ge-1/1/2.650);
foreach (@array){
my @sepInt = split(/[.]/);
print "name interface: $sepInt[0] | vlan id: .$sepInt[1]\n"
}
输出:
name interface: ge-1/1/2 | vlan id: .552
name interface: ge-1/1/2 | vlan id: .561
name interface: ge-1/1/2 | vlan id: .562
name interface: ge-1/1/2 | vlan id: .580
name interface: ge-1/1/2 | vlan id: .582
name interface: ge-1/1/2 | vlan id: .590
name interface: ge-1/1/2 | vlan id: .592
name interface: ge-1/1/2 | vlan id: .640
name interface: ge-1/1/2 | vlan id: .642
name interface: ge-1/1/2 | vlan id: .644
name interface: ge-1/1/2 | vlan id: .650
答案 2 :(得分:2)
使用数组数组:
foreach my $interface(@nameInt){
push @sepInt, [ split /[.]/, $interface ];
}
答案 3 :(得分:0)
在此循环的每次迭代中:
foreach my $interface(@nameInt){
@sepInt = split /[.]/, $interface;
}
用新拆分的行替换@sepInt
。 @sepInt
始终是一个字符串数组。所以,当你到达 p>
print "name interface: ".$sepInt[0][0]." | vlan id: ".$sepInt[0][1];
Can't use string ("ge-1/1/5") as an ARRAY ref while "strict refs" in use
$sepInt[0]
是一个字符串,而不是一个数组。
您的意思是在那里使用$nameInt[0][0]
吗?