perl如何从数组中拆分字符串并将其保存回来

时间:2013-12-12 15:45:03

标签: arrays perl

我试图从数组中拆分字符串并用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

4 个答案:

答案 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始终是一个字符串数组。所以,当你到达

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]吗?