Вот немного разобрался со своими проблемами - ушел на очередной околоземный виток в институте (я снова четверокурсник, хаха), нашел себе новую работу (программист python+django, аккурат то, о чем я мечтаю вот уже полгода как), сейчас дорабатываю две недели в "Докторе" и сваливаю.
Впечатления от почти двух лет работы: в общем, все было ок (а местами даже лучше, чем ок), не особо и жалуюсь. Коллектив отличный, режим работы неплохой, занятия не особо скучные (в основном, но бывают, конечно, рутинные места, хотя - где их нет?). Добираться от дома, опять же, достаточно удобно :]
Но. Была очень серьезная проблема, которую разрешить не удалось. О чем я искренне сожалею. Мне будет не хватать вас, ребята.
Ну ладно, с лирически-грустной частью покончено. Теперь расскажу вам кое-что интересное.
А именно - о ключе 'e' в регулярных выражениях Perl. Тема эта для меня новая - не так уж и давно начал ее ковырять, поэтому если что - не обессудьте, буду рад выслушать всяческую критику, замечания и предложения.
Итак, ключ 'e'. Что же он делает?
Во-первых, он применяется только в выражениях замены, s///, стало быть. Нужен он для того, чтобы интерпретировать правую часть выражения замены и подставить результат интерпретации вместо части левой.
Ну например. Приспичило нам (пример настолько надуманный, что мне страшно, что же с моей фантазией) посчитать сумму, записанную в строке, тут же поделить результат на 2 и подставить в ту же строку вместо исходного выражения, заставив пользователя недоумевать - куда же делась еще половина суммы?
Не имея на руках волшебного ключа 'e', мы бы делали так (хотя вы бы, может, делали и не так):
my $var = 'blah blah blah 11+12 blah blah'; $var =~ /(\d+)\+(\d+)/; my $result = ( $1 + $2 ) / 2; $var =~ s/(\d+)\+(\d+)/$result/; print $var;
Круто, да? Ну, относительно, честно говоря. Целых две операции с регулярными выражениями. А если нам надо произвести десяток замен, и каждую потребуется вычислить? Придется организовывать цикл.
А теперь мы используем волшебный ключ 'e':
my $var = 'blah blah blah 11+12 blah blah'; $var =~ s!(\d+)\+(\d+)!($1+$2)/2!e; print $var;
В этот все гораздо круче и непонятнее - perl, ясное дело.
Строка "($1+$2)/2" интерпретируется (кстати, здесь, чтобы не экранировать символ слеша, я заменил ограничители регэкспа на восклицательные знаки), и результат "11.5" подставляется в строку.
Вот такая удобная фича. Про наличие ее в других языках не знаю, не изучал этот вопрос.
Комментариев нет:
Отправить комментарий