2015-04-02 104 views
1

我有一个字符串输入,可以说这是:的Perl:字符串,分割字符串的foreach数组,每个字符串设定为一个新的数组

junk 0 0 :::1000 
junk 0 0 :::1001 
junk 0 0 :::1002 
junk 0 0 :::1009 

我只想要100X号码的最后一位数字,我想把它放在一个字符串中,并用这些字符串填充一个数组。

我有以下代码

my @lines = split /^/, $input; 

foreach my $line (@lines) 
{ 
    my ($garb, $long_ports) = (split /\s*:::\s*/, $line); 

    my ($garb2, $ports) = (split /10/, $long_ports); 

    if ($ports < 10) 
    { 
    my ($garb3, $ports2) = (split /0/, $ports); 

    #Add 0 since 0 port is split to empty string 
    if (length($ports2) == 0) 
    { 
     $ports2 = "0$ports2"; 
    } 

    #Create file name format 
    @locked_ports = ".X$ports2-lock"; 
    } 
} 

当我print "@locked_ports"我只得到了价值.X9-lock,当我想所有4

我如何使它所以@locked_ports包含了所有4串的? :

.X0-lock 
.X1-lock 
.X2-lock 
.X9-lock 

回答

1

运行,当你修改代码如下

my @lines = split /^/, $input; 

foreach my $line (@lines) 
{ 
chomp($line); 
my ($garb, $long_ports) = (split /\s*:::\s*/, $line); 

my ($garb2, $ports) = (split /10/, $long_ports); 

if ($ports < 10) 
{ 
    my ($garb3, $ports2) = (split /0/, $ports); 
    #Add 0 since 0 port is split to empty string 
    if (length($ports2) == 0) 
    { 
    $ports2 = "0$ports2"; 
    } 

    #Create file name format 
    push @locked_ports, ".X$ports2-lock"; 
    } 
} 

你必须push@locked_ports末和chomp的$线锁摆脱换行符

1

一个快速的地方就是改变这种:

@locked_ports = ".X$ports2-lock"; 

到:

push @locked_ports,"X${ports2}-lock"; 

还要确保您使用use strict'use warnings;和发布片断,你声明@locked_ports并打印。

2

你只需要的使用push将每个所需结果添加到数组的末尾。下面是一个示例代码片段:

foreach my $line (@lines) { 
    chomp $line; 
    if ($line =~ /(\d)$/) { 
     push @ports, ".X$1-lock"; 
    } 
}