Операторы ( 2стр )
Операторы ввода-вывода
К таким операторам относятся скобки
`
` и команда
< >
. Начнем с первого. Результатом работы такого оператора является
обработка строки, заключенной в скобках
`
` (`_строка`),
как системном командой и вывод "псевдо" литерала. Если сравнивать
по контексту самой строки, то в скалярном - это полный результат
в одну строку и в списковом - список, состоящий из результатов
строк этого списка.
По умолчанию считывание происходит в переменную
$?.
Вторая команда выглядит так
<
_файл
>
, где можно сразу догадаться, что она предназначена для
чтения из файла. Следует особо подчеркнуть, здесь "_файл" -
не имя файла, а лишь его указатель, созданный функцией
open()
. Пример:
open(STDIN,"/etc/passwd");
while ($string = <STDIN>)
{
@a = split(/[:]/,$string);
}
где
STDIN - стандартный ввод (указатель файла по умолчанию)
В скалярном контексте считывание происходит в виде одной
строки, независимо от указания перевода строки (
\n
). В строковом - файл целиком, как список, где элементом является
содержание строки файла. Возращение false по окончания считывания файла
означает то, что результат оператора "<>" не определен. При не указании
в строке данного оператора никаких аргументов, то будет восприниматься
как стандартный ввод. Иными словами "
<
>
" эквивалентен
<STDIN>
. По умолчанию считывание происходит в переменную
$_.
При указании в данном операторе переменной, то контекст последней будет
являться ссылкой на указатель файла или непосредственно самим именем
указателя файла. В случае отсутсвия указателя, контекст переменной
становится шаблоном имен файлов, т.е. получим все имена файлов на
диске, отобранные по этому шаблону.
Нулевой дескриптор файла обработается также как в
sed и
awk
, то есть считывается список из файлов перечисленных в командной
строке.
Оператор замены строки
Оператор
s/PATTERN/REPLACEMENT/egimosx
производит поиск
строки по шаблону и случае успеха происходит ее замена, где:
-
PATTERN
- шаблон, и если строка по нему будет найдена, то производится подстановка
на ее место текста
REPLACEMENT . Возвращает количество произведенных
подстановок.
-
REPLACEMENT
- подстрока, которая замещает строку, найденную по шаблону
-
e
- обрабатывать правую часть как выражение
-
g
- глобальный поиск по соответствующему шаблону
-
i - производит поиск не различающий регистр (большие и маленькие) букв.
-
m - интерпретирует строку, как многострочную переменную
-
o - происходит подстановку только один раз и на место первой строки, найденной
по шаблону.
-
s
- интерпретирует строку, как однострочную переменную
-
x - применение расширенных регулярных выражений
Примечание
: Если перед этим оператором не использовался
оператор =~ или !~ для определения переменной, которая будет обрабатываться,
то тогда используется переменная $_ В качестве разделителя можно
использовать любой (кроме пробела) символ, а не только "/". При использовании
разделителя начальный символ "s" можно не писать.
Теперь давайте приведем пример замены строк с использованием
переменной
$_
так, как применяется оператор "
=~":
$path =~ s|/usr/local/bin|/usr/bin|;
($foo = $bar) =~ s/this/that/o;
$count = ($paragraf =~ s/Mister\b/Mr./gm);
Аналогично работат оператор замены строк
m/PATERN/gimosx/PATERN/gimosx.
Оператор замены множества символов
Данными операторами являются -
tr/SEARCHLIST/REPLACEMENTLIST/cds и
y/SEARCHLIST/REPLACEMENTLIST/cds
. Заменяет все найденные символы из множества символов
SEARCHLIST на соответствующие
символы из множества символов
REPLACEMENTLIST
. Возвращает число символов, которые
были заменены или удалены. Если с помощью операторов "
=~"и "
!~
" не была
указано какое-либо выражение, то по умолчанию будет действовать
переменная
$_
. Символ "
y" является
синонимом "
tr" . Если
SEARCHLIST
,будет заключен в скобки, то
REPLACEMENTLIST
тоже закрывается в скобки,
которые могут отличаться от тех, в которые заключается шаблон, например:
tr[A-Z][a-z]
tr(+-*/) /ABCD/
Символы
cds
, как и в случае с предшествующими операторами, являются опциями:
-
c
- дополняет
SEARCHLIST
из найденных
REPLACEMENTLIST
-
d
- стиратель найденных, но не востребованных символов
-
s
- служит для сокращения повторяющихся символов в одной строке с
один символ.
Подводя итог по изучению операторов языка Perl можно закрепить
эти знания таблицей, в которой операторы выстроены также с учетом
приоритета и еще добавлена ассоциативность (расположение оператора,
относительно переменной).
Ассоциативность
|
Операторы
|
левая |
термы и левосторонние
списковые операторы |
левая |
-> |
- |
++ и -- |
правая |
** (две звездочки) |
правая |
!~\ унарны + и - |
левая |
=~ и !~ |
левая |
* (звёздочка), /,% , x |
левая |
+ и - |
левая |
<< >> |
- |
именованные унарные операторы |
- |
<, >, <=, >=, lt, gt,
le, ge |
- |
==, !=, <=>, eg, ne, cmp |
левая |
& |
левая |
I, ^ |
левая |
&& |
левая |
II |
- |
.. |
правая |
?: |
правая |
=, +=, -=, *= |
левая |
, (запятая) и => |
- |
правосторонние списковые
операторы |
левая |
not (логическое НЕ) |
левая |
and (логическое И) |
левая |
or, xor (ИЛИ и исключающее
ИЛИ) |
|