Вопрос по использованию Split в Perl - PullRequest
1 голос
/ 24 декабря 2010

Я написал небольшой скрипт, чтобы использовать split() как это,

use strict;
use warnings;
use Data::Dumper;

my $fh = \*DATA; 


while(my $line = <$fh>) 
{ 
    my @values = split(':', $line);

    foreach my $val (@values) {

      print "$val\n";
    }
} 

__DATA__   
1 : Hello World String10 : NO : A1B2,B3
11 : Hello World String11 : YES : A11B2,B3,B14,B25

A1B2,B3 и A11B2,B3 являются символами, такими как только одна буква A и одно или два числа 2, 3, 14, 25 и т. Д., Затем объединяются только с одной буквой B и одно или два числа, такие как 2, 3, 14, 25. и т.д.

Теперь выведите это

1
 Hello World String10
 NO
 A1B2,B3

11
 Hello World String11
 YES
 A11B2,B3,B14,B25

Как я могу сохранить последний член массива из @values и сделать конкатенацию и выложить как это.

1
 Hello World String1
 NO
 A1B2,A1B3

11
 Hello World String11
 YES
 A11B2,A11B3,A11B14,A11B25

Спасибо за ваши комментарии и ответы.

[обновление]

Мне нужно, чтобы конкатенация следовала правилу.

A и одно или два числа, соединенные B и одним или двумя числами, разделенными на ,

Ответы [ 2 ]

2 голосов
/ 24 декабря 2010

Вы можете сделать:

my @values = split(':', $line);
my $a = $values[-1];
$a =~ s/.*(A\d+).*/$1/s;
$values[-1] =~ s/(?<=,)/$a/g;

Посмотреть

1 голос
/ 24 декабря 2010

Не совсем понятно, как то, что вы спрашиваете, будет применяться даже в немного разных случаях, но вот моя попытка. Перед печатью @values ​​сделайте

$values[-1] =~ s/(?<=,)/ substr($values[-1],0,3) /ge;
...