-5
my @input = ("2001::2               62     00:00:00:00:00:00 incmp  1/1 vlan-id 100 ");

从包含上述字符串的数组中,我想提取该位置的值62并将其存储到一个新数组中。怎么做?

4

3 回答 3

1

假设您的数组最终将包含多个值:

my @new_array = map { (split)[1] } @input;

在空白处拆分每一行并将第二个元素映射到一个新数组中。

于 2013-09-03T11:43:20.133 回答
1

split ' '在空白处拆分字符串,并( EXPR )[1]返回由 . 返回的第二个标量EXPR

my $input = "2001::2               62     00:...";
my $second = ( split ' ', $input )[1];

你已经澄清你想从数组的每个元素中提取该字段,所以

my @seconds = map { ( split )[1] } @inputs;

这是缩写

my @seconds = map { ( split ' ', $_, 0 )[1] } @inputs;
于 2013-09-03T11:43:27.673 回答
0

据我所知,我不认为你想要 grep 不能捕获一个组(在你的情况下你想要捕获62)。

我会使用一个简单的正则表达式:

#!/usr/bin/perl
use warnings;
use strict; 

my @input = ("2001::2 62 00:00:00:00:00:00 incmp 1/1 vlan-id 100 ");

my @foo;
foreach (@input) {
    chomp;
    my (@match) = ($_ =~ /\d+\s+(\d+)\s+/);
    push @foo, @match;
}

foreach (@foo){
    print "$_\n";
}

输出:

62

当您使用数组时,我想您将有多个匹配项。以上将匹配与您的测试示例位于同一位置的每个数字,并将它们推送到一个新数组 - @foo...

于 2013-09-03T11:46:15.957 回答