- Синтаксис:
- pos [$SCALAR]
- Функция pos() возвращает позицию, в которой завершился последний глобальный
поиск $SCALAR=~m/.../g, осуществленный в строке, задаваемой переменной $SCALAR. Возвращаемое
значение равно числу length($`) + length($&). Следующий глобальный поиск m/.../g в данной
строке начнется именно с этой позиции.
- Если аргумент $SCALAR отсутствует, возвращается позиция завершения последнего глобального поиска, осуществленного в строке $_.
- Пример:
- Если аргумент $SCALAR отсутствует, возвращается позиция завершения последнего глобального поиска, осуществленного в строке $_.
$words = "one two three four"; while ($words =~m/\w+/g) { print "pos=",pos($words)," length(\$`)=",length($`), " length(\$&)=",length($&),"\n"; }
- В результате выполнения данного скрипта будут выделены номера позиций, соответствующих
окончаниям слов в строке $words:
pos=3 length($`)=0 length($&)=3 pos=7 length($`)=4 length($&)=3 pos=13 length($`)=8 length($&)=5 pos=18 length($`)=14 length($&)=4
- функцию pos() можно использовать в левой части операции присваивания для изменения начальной позиции следующего поиска:
# изменение начальной позиции для последующего поиска $words = "one two three four"; pos $words = 4; while ($words =~m/\w+/g) { print pos $words, "\n"; }
- Здесь поиск слов начнется со второго слова, и будут выделены номера позиций 7, 13 и 18.
quotemeta
Возвращает строку, в которой перед каждым не алфавитно-цифровым символом поставлена обратная косая черта. Значение параметра ВЫРАЖЕНИЕ интерпретируется как строка. (Внутренняя функция реализации управляющего символа \Q в строках в двойных кавычках.)
quotemeta ВЫРАЖЕНИЕ quotemeta (эквивалентно quotemeta $_)Например, в результате выполнения
print quotemeta "*****", "\n";
будет выведена строка
\*\*\*\*\*
split
- Синтаксис:
- split [/PATTERN/[, EXPR[, LIMIT]]]
- Разбивает строку EXPR на отдельные строки, используя в качестве разделителя образец, задаваемый
регулярным выражением PATTERN. В списковом контексте возвращает массив полученных строк, в скалярном
контексте - их число. Если функция split() вызывается в скалярном контексте, выделяемые строки
помещаются предопределенный массив @_. Об этом не следует забывать,
так как массив @_ обычно используется для передачи параметров
в подпрограмму, и обращение к функции split() неявно в скалярном контексте эти параметры уничтожит.
- Если присутствует параметр LIMIT, то он задает максимальное количество строк, на которое может быть разбита исходная строка. Отрицательное значение параметра LIMIT трактуется как произвольно большое положительное число.
- Если параметр EXPR опущен, разбивается строка $_. Если отсутствует также параметр PATTERN, то в качестве разделителя полей используются пробельные символы после пропуска всех начальных пробельных символов (что соответствует заданию образца в виде /\s+). К пробельным символам относится пробел (space), символ табуляции (tab), возврат каретки (carriage return), символ перевода строки (line feed) и символ перевода страницы (form feed).
- Если присутствует параметр LIMIT, то он задает максимальное количество строк, на которое может быть разбита исходная строка. Отрицательное значение параметра LIMIT трактуется как произвольно большое положительное число.
- Предопределенная глобальная переменная $_ служит для обозначения
используемой по умолчанию области ввода и поиска по образцу. Обычно мы осуществляем ввод при
помощи операции "<>"("ромб"). Внутри угловых скобок <> может
стоять дескриптор файла ввода, например, <STDIN>. Если дескриптор
файла отсутствует, то в качестве файлов ввода используются файлы, переданные программе Perl в
качестве аргументов командной строки.
- Пусть, например, программа содержится в файле script.pl:
#! /usr/bin/perl while (<>) { print; };
- Программа вызвана следующим образом:
- script.pl file1 file2 file3
- Тогда операция <> будет считывать строки сначала из файла file1, затем из файла file2 и, наконец, из файла file3. Если в командной строке файлы не указаны, то в качестве файла ввода будет использован стандартный ввод.
- Только в случае, когда условное выражение оператора while состоит из единственной операции "ромб", вводимое значение автоматически присваивается предопределенной переменной $_. Вот что означают слова о том, что переменная $_ применяется для обозначения используемой по умолчанию области ввода. Аналогично обстоит дело с поиском по образцу.
- Пусть, например, программа содержится в файле script.pl:
- Пример использования функции split():
#!/usr/bin/perl while (<>) { chop; print "Число полей во входной строке '$_' равно ", $n=split; print "\nВходная строка разбита на строки:\n"; foreach $i (@_) { print $i . "\n"; } print "Объединение списка строк в одну строку через '+':\n"; $joined = join "+", @_; print "$joined\n"; }
- В результате применения операции ввода <> внутри условного выражения оператора while
вводимая строка будет присвоена переменной $_. Функция chop()
без параметров применяется к переменной $_. В операции print
вторым операндом является выражение $n=split, в котором функция split
вызывается в скалярном контексте и без параметров. Поэтому она применяется по умолчанию к переменной
$_. В качестве разделителя полей по умолчанию используется множество
пробельных символов, а результат помещается в массив @_. А затем к
массиву @_ применяется функция join(),
объединяющая строки-элементы массива в одну строку.
- Если ввести строку "one two three", то вывод будет иметь вид:
- one two three
- Число полей во входной строке 'one two three' равно 3
- Входная строка разбита на строки:
- one
- two
- three
- Объединение списка строк в одну строку через '+':
- one+two+three
- one two three
study
Оптимизирует строковые данные переметра СТРОКА для дальнейшего использования в повторных операциях поиска по образцу. В цикле с несколькими опрерациями поиска может сэкономить время выполнения.
study ВЫРАЖЕНИЕ study (эквивалентно study $_)