Копирование с подстановкой

Проблема

Вам надоело многократно использовать две разные команды для копирования и подстановки.

Решение

Замените фрагменты вида:
$dst = $src;
$dst =~ s/this/that/;
следующей командой:
($dst = $src) =~ s/this/that/;

Комментарий

Иногда подстановка должна выполняться не в исходной строке, а в ее копии, однако вам не хочется делить ее на два этапа. Например:
# Выделить базовое имя
($progname = $O) =~ s!^.*/!!;
# Начинать Все Слова С Прописной Буквы
($capword = $word) =~ s/(\w+)/\u\L$1/g;
# /usr/man/man3/foo.1 заменяется на /usr/man/man/cat3/foo.1
($catpage = $manpage) =~ s/man(?=\d)/cat/;
Подобная методика работает даже с массивами:
@bindirs = qw( /usr/bin /bin /usr/local/bin );
for (@libdirs = @bindirs) { s/bin/lib/ }
print "@libdirs\n";
/usr/lib /lib /usr/local/lib
Если подстановка должна выполняться для правой переменной, а в левую заносится результат, следует изменить расположение скобок. Обычно результат подстановки равен либо "" в случае неудачи, либо количеству выполненных замен. Сравните с предыдущими примерами, где в скобки заключалась сама операция присваивания. Например:
($а = $b)  =~ s/x/y/g;     # Скопировать $b и затем изменить $а
$а = ($b =~ s/x/y/g);      # Изменить $b и занести в $a количество подстановок

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: