2015-04-02 101 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"; 
    } 
}