Программирование > Регулярные выражения
Все, кроме выражения
metton:
Vladn
То что они read-only я понял. Смущает тор, что я не нашёл про это ничего в "Программировании на Perl".
--- Цитировать ---Vladn:
что приводит к перезаписи $1 $2 и $3, точнее - записи в них пустых значений
--- Конец цитаты ---
А вот это вообще не понял. Почему пустых?
Vladn:
metton
--- Цитировать ---А вот это вообще не понял. Почему пустых?
--- Конец цитаты ---
После каждой операции =~s/// или =~/// переменные $1, $2 и т.д. обновляются в соответствии с этой операцией. А т.к. в выражении =~s?1?2? скобок нет, то все эти переменные принимают нулевое значение. По крайней мере это так на моем ActivePerl 5.6.1
Я придумал более красивое решение мою же поставленной задачи:
--- Код: ---sub change{
my $i=1;
my %coms;
while ($_[0]=~s/()/\\x07$i/s) {
$coms{$i}=$1;
$i++;
}
$_[0]=~s/\\&/\\&/g;
while ($i>1) {
$i--;
$_[0]=~s/\\x07$i/$coms{$i}/;
}
}
--- Конец кода ---
Т.е. сначала удаляем комментарии, затем заменяем амперсанты, затем восстанавливаем комментарии.
metton:
Vladn
--- Цитировать ---После каждой операции =~s/// или =~/// переменные $1, $2 и т.д. обновляются в соответствии с этой операцией
--- Конец цитаты ---
Да, об этом я что-то не подумал.
--- Цитировать ---более красивое решение
--- Конец цитаты ---
Красивое? Сначала красота решения у тебя отождествлялась с количеством строчек (а именно одной). Я такое и написал ;)
[OFF]зы: берегись Yukko ;) :D[/OFF]
Vladn:
--- Цитировать ---Красивое?
--- Конец цитаты ---
Читай внимательнее: более красивое
Объясняю для программистов:
--- Код: ---var [Красивое] = 1 строчка;
var [Более красивое] = меньше строчек OR более эффективное, чем менее красивое;
--- Конец кода ---
Вообще-то я немного тормознул: два раза написал одно и то же решение. Просто я думал, что первое решение было другим.
Навигация
Перейти к полной версии