Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Обработка строки


Автор: rcdimon 25.1.2009, 01:50
Всем привет. 

Есть строка, которая может быть либо просто числом, либо такого вида- "1,12,344,123,44,55"
Надо это число или каждое из этих чисел пропусить через процедуру и вывести строкой.

Пример

Код

sub add {
  my $a = shift;
  return $a+1;
}

my $s = '1,2,3,4,5,6';

print $s =~ m/,/ ?
     join(',', 
        add($_) foreach(
          split(/,/, $s)
        )
     ) : add($s)



Что-то типа этого, только чтобы работало ) 
Уверен, что как-то можно записать это так, одной строкой....
 

Автор: unicross 25.1.2009, 02:07
Код

sub add {
  my $a = shift;
  return $a+1;
}

my $s = '1,2,3,4,5,6';
print join(',', map(&add($_), split(/,/, $s)));

Или
Код

my $s = '1,2,3,4,5,6';
print join(',', map($_+1, split(/,/, $s)));

Автор: tolkien 25.1.2009, 04:43
Цитата(rcdimon @ 25.1.2009,  01:50)
...
Уверен, что как-то можно записать это так, одной строкой....

это у вас в ТЗ такое жесткое условие поставлено?

Автор: amg 25.1.2009, 08:47
Еще вариант:
$s = "1,12,344,123,44,55";
$s =~ s/\d+/add($&)/eg;
print "$s\n";

Автор: nitr 25.1.2009, 12:41
Понравился вариант от amg, сам только повторюсь ;) А в примере unicross можно просто убрать столько скобочек.
Цитата(rcdimon @  25.1.2009,  01:50 Найти цитируемый пост)
$s =~ m/,/ ?

эта проверка лишняя, за вас всё сделает split.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)