2015-04-02 2 views
1

Я получил строку ввода, позволяет сказать, что это:Perl: Еогеасп массив строк, разделенных строк, установите каждую строку в новый массив

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"; 
    } 
} 
Смежные вопросы