Копирование с подстановкой
Проблема
Вам надоело многократно использовать две разные команды для копирования и подстановки.
Решение
Замените фрагменты вида:
$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 количество подстановок
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|