Операции связывания

Кроме операции замены, использующей регулярные выражения и предназначенной для изменения содержимого строки в соответствии с заданным регулярным выражением образцом, в языке определены еще две подобные операции: поиск m/.../ и транслитерация tr/.../.../. Для них в языке используется собирательное название «сопоставление с образцом».
По умолчанию все эти операции работают с содержимым специальной переменной $_, анализируя и изменяя его в соответствии с алгоритмом применяемой операции поиска, замены или транслитерации. Если же в программе необходимо выполнить любую из указанных операций над содержимым некоторой другой переменной или строковым литералом, то необходимо связать эту переменную или литерал с соответствующей операцией сопоставления с образцом. Для этого в языке определены две операции связывания (=~ и !~), левым операндом которых выступает переменная или строковый литерал, а правый операнд определяет одну из операций сопоставления с образцом. Единственное различие между двумя операциями связывания заключается в возвращаемом значении. Первая операция =~ возвращает булево значение «истина», если при выполнении операции сопоставления с образцом в строке была найдена последовательность символов, определяемая регулярным выражением, и «ложь» в противном случае. Возвращаемое значение операции !~ полностью противоположно предыдущей операции связывания. Приведем несколько операций сопоставления с образцом и связывания:
$_ = "My message";
s/My/Your/;             # Переменная $_ теперь содержит строку
                        # "Your message"
$message = "Mу message"; 
$message =~ s/My/Your/; # Переменная $message теперь
                        # содержит строку "Your message",
                        # а результатом операции связывания
                        # является «истина»
$message =~ m/My/;      # Возвращаете значение «ложь»
$message !~ m/My/;      # Возвращаемое значение «истина»

Следующая страница Содержание главы





Нет комментариев.



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