Вот одно из решений.Он полагается на двух split
, выполняющих всю тяжелую работу, с map
для удобства.Это, вероятно, не очень отличается от других ответов, но это чисто, и это довольно легко для глаз (за исключением, может быть, для печати).И я думаю, что он будет работать с большинством вариантов пробелов / и / запятой.
use warnings;
use strict;
my @w = ( "Apple", "Apple and Orange", "Apple, Orange, and Banana",
"Apple, Orange and Banana ,and Pineapple" );
for (@w) {
print join (':', humanize($_)), "\n";
}
sub humanize {
my $str = shift;
my @list = split /\s*and\s*/, $str;
@list = map { split /\s*,\s*/, $_ } @list;
return @list;
}
Вывод:
Apple
Apple:Orange
Apple:Orange:Banana
Apple:Orange:Banana:Pineapple