PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 178


Подобная методика работает даже с массивами:

@bindirs = qw(  /usr/bin /bin /usr/local/bin  ), for (@libdirs = @bindirs)   {  s/bin/lib/ } print    @>libdirs\n  , /usr/lib   /lib   /usr/local/lib

Если подстановка должна выполняться для правой переменной, а в левую за­носится результат, следует изменить расположение скобок. Обычно результат под­становки равен либо "" в случае неудачи, либо количеству выполненных замен. Сравните с предыдущими примерами, где в скобки заключалась сама операция присваивания. Например:


186   Глава 6 • Поиск по шаблону

($а =    $b) =~ s/x/y/g      # Скопировать $Ь и затем изменить $а $а = ($b    =~ s/x/y/g)    # Изменить $Ь и занести в $ количество подстановок

D> Смотри также-------------------------------------------------------------------------------

Раздел «Assignment Operators» perlop(l)

6.2. Идентификация алфавитных символов

Проблема

Требуется узнать, состоит ли строка только из алфавитных символов

Решение

Наиболее очевидное решение не подходит для общего случая

if ($var -    /~[A-Za-z]+$/)   {

# Только алфавитные символы }

Дело в том, что такой вариант не учитывает локальный контекст пользовате­ля Если наряду с обычными должны идентифицироваться символы с диакри­тическими знаками, воспользуйтесь директивой use locale и инвертированным символьным классом

use locale

if ($var -" /~[-\W\d_]+$/) {

print var is purely alphabetic\n

Комментарий

В Perl понятие «алфавитный символ» тесно связано с локальным контекстом, поэтому нам придется немного схитрить Регулярное выражение \w совпадает с одним алфавитным или цифровым символом, а также символом подчеркивания Следовательно, \W не является одним из этих символов Инвертируемый символь­ный класс ["\W\d_] определяет байт, который не является алфавитным символом, цифрой или подчеркиванием После инвертирования остаются одни алфавитные символы которые нас и интересуют В программе это выглядит так

use locale

use POSIX    locale_h

Я На вашем компьютере строка локального контекста может выглядеть иначе unless  (setlocale(LC_ALL      fr_CA IS08859-1  ))   { die    couldn t set locale to French Canadian\n




Начало  Назад  Вперед



Книжный магазин