gt; 31, февраль
Пример 16
%дни_месяца = ( январь =& gt; 31, февраль => 30, );
Print файл список print список print
print файл список
print список
Выводит строку или список строк в файл. Возвращает true при успехе. Аргумент файл может быть скалярной переменной, содержащей имя указателя файла, если он отсутствует, то осуществляется вывод в стандартный выходной поток STDOUT (если не было вызова select()). Если список отсутствует, то выводится значение переменной $_. Для вывода по умолчанию в другой файл необходимо использовать функцию select(). Так как print работает в списковом контексте, то все элементы списка так же вычисляются в списковом контексте, т.е. функции будут возвращать списковые значения. Аргументы можно заключать в круглые скобки. Если указатель файла - элемент массива, то элемент нужно заключить в фигурные скобки для вычисления блока.
Printf файл список printf список
printf файл список
printf список
Аналогичен вызову "print файл sprintf(список)". Первый элемент списка должен быть форматом printf(), как и в С.
Private переменные
Private переменные.
Для применения переменных доступных только внутри блока или подпрограммы необходимо определить их с помощью функции my(список).
Если переменная одна, то скобки можно опустить.
my() декларирует private переменные в пределах текущей подпрограммы, блока, функции eval() или do/require/use файлов. Private переменные аналогичны auto переменным в С.
Простое предложение
Простое предложение.
Простое предложение обязательно заканчивается символом ';' если только это не последнее предложение в блоке где ';' можно опустить. Заметьте, что существуют операторы такие как eval{} и do{}, которые выглядят как сложные предложения, но на самом деле это термы и требуют обязательного указания конца предложения.
Любое простое предложение может содержать single модификатор перед ';'. Существуют следующие single модификаторы:
if EXPR unless EXPR while EXPR until EXPRгде EXPR - выражение, возвращающее логическое значение true или false. Модификаторы while и until вычисляются в начале предложения кроме блока do, который выполняется первым.
if EXPR- Модификатор "если". Предложение выполняется, если EXPR возвращает true.
Прототипы (prototypes)
Прототипы (prototypes).
Для краткого описания типа передаваемых подпрограмме параметров можно применять прототипы. В Perl существуют следующие прототипы:
Push массив список
push массив, список
Добавить элементы массива значениями из списка. Длина массива увеличивается на количество элементов списка.
Q/строка/ qq/строка/ qx/строка/ qw/строка/
q/строка/
qq/строка/
qx/строка/
qw/строка/
Обычные операторы строк. Смотри главу Операторы.
Quotemeta выражение
quotemeta выражение
Вычисляет выражение, в котором метасимволы рассматриваются как обычные символы.
Rand выражение rand
rand выражение
rand
Возвращает случайное число в диапазоне между 0 и выражением. Если выражение отсутствует - между 0 и 1. Данная псевдослучайная последовательность сбрасывается функцией srand().
Read файл скаляр длина смещение read файл скаляр длина
read файл, скаляр, длина, смещение
read файл, скаляр, длина
Прочитать указанное число байт из файла в скалярную переменную. Возвращает количество прочитанных байт или неопределенность при ошибке. Длина скаляра станет равной количеству считанных байт. Смещение указывают, если данные нужно поместить не с самого начала строки.
Readdir директория
readdir директория
Возвращает имя следующего файла в директории открытой командой opendir(). В скалярном контексте возвращает все оставшиеся имена файлов. Если файлов больше нет, то возвращает неопределенность в скалярном контексте и пустую строку в списковом.
Readlink выражение
readlink выражение
Возвращает значение символической ссылки. При ошибке возвращает неопределенное значение.
Recv SOCKIT SCALAR LEN FLAGS
recv SOCKIT, SCALAR, LEN, FLAGS
Получить сообщение из сокета. Аналогичен системному recvfrom().
Redo метка redo
redo метка
redo
Перейти к началу блока, минуя вычисление условия и блока continue. Если метка отсутствует, то переход к ближайшему внешнему блоку.
Redo начать новый цикл не вычисляя
redo - начать новый цикл не вычисляя EXPR и не выполняя continue блок.
Ref выражение
ref выражение
Возвращает true, если выражение это ссылка, иначе - false. Возвращаемое значение зависит от типа ссылки. Существуют следующие типы ссылок:
REF, SCALAR, ARRAY, HASH, CODE, GLOBЕсли аргумент - ссылка на класс, то возвращается имя класса. Функция ref() аналогична функции typeof().
Регулярные выражения (шаблоны)
Регулярные выражения (шаблоны).
В данной главе описывается синтаксис регулярных выражений. Чаще всего в Perl они используются в операторах поиска и замены таких как s//, m/, операторах связки =~ или != и т.д. Как правило все эти операторы имеют схожие опции такие как:
i | - не различать строчные и заглавные буквы. |
m | - считать строку многострочной. |
s | - однострочная строка. |
x | - расширенный синтаксис ( использование пробелов и комментариев) |
Обычно все эти опции обозначают как '/x'. Их можно использовать даже внутри шаблонов, используя новую конструкцию (?...)
Регулярные выражения или шаблоны (pattern) то же самое, что и regexp процедуры в Unix. Выражения и синтаксис заимствованы из свободно распространяемых процедур V8 Генри Спенсера (Henry Spencer), там же они подробно и описаны.
В шаблонах используются следующие метасимволы (символы обозначающие группы других символов) часто называемые egrep - стандартом:
\ | - считать следующий метасимвол как обычный символ. |
^ | - начало строки |
. | - один произвольный символ. Кроме '\n' - конец строки. |
$ | - конец строки |
| | - альтернатива (или) |
() | - группировка |
[] | - класс символов |
Метасимволы имеют модификаторы (пишутся после метасимвола):
* | - повторяется 0 или большее число раз |
+ | - -//- 1 или большее число раз |
? | - 1 или 0 раз |
{n} | - точно n раз |
{n,} | - по меньшей мере раз |
{n,m} | - не меньше n, но и не больше m |
Во все других случаях фигурные скобки считаются обычными (регулярными) символами. Таким образом '*' эквивалентна {0,} , '+' - {1,} и '?' - {0,1}. n и m не могут быть больше 65536.
По умолчанию действие метасимволов "жадно" (greedy). Совпадение распространяется столько раз, сколько возможно, не учитывая результат действия следующих метасимволов. Если вы хотите "уменьшить их аппетит", то используйте символ '?'. Это не изменяет значение метасимволов, просто уменьшает распространение. Таким образом:
*? | - станет 0 и более |
+? | - 1 и более |
?? | - 0 или 1 раз |
{n}? | - точно n раз |
{n,}? | - не меньше n раз |
{n,m}? | - больше или равно n и меньше m раз |
Шаблоны работают так же, как и двойные кавычки, поэтому в них можно использовать `\` - символы (бэкслэш-символы):
\t | - символ табуляции |
\n | - новая строка |
\r | - перевод каретки |
\а | - перевод формата |
\v | - вертикальная табуляция |
\a | - звонок |
\e | - escape |
\033 | - восьмеричная запись символа |
\x1A | - шестнадцатеричная |
\c[ | - control символ |
\l | - нижний регистр следующего символа |
\u | - верхний регистр -//- |
\L | - все символы в нижнем регистре до \E |
\U | - в верхнем -//- |
\E | - ограничитель смены регистра |
\Q | - отмена действия как метасимвола |
Дополнительно в Perl добавлены следующие метасимволы:
\w | - алфавитно-цифровой или '_' символ |
\W | - не -//- |
\s | - один пробел |
\S | - один не пробел |
\d | - одна цифра |
\D | - одна не цифра |
Обратите внимание, что все это "один" символ. Для обозначения последовательности применяйте модификаторы. Так:
\w+ | - слово |
\d+ | - целое число |
[+-]?\d+ | - целое со знаком |
[+-]?\d+\.?\d* | - число с точкой |
Кроме того существуют мнимые метасимволы. Обозначающие не существующие символы в месте смены значения. Такие как:
\b | - граница слова |
\B | - не граница слова |
\A | - начало строки |
\Z | - конец строки |
\G | - конец действия m//g |
Граница слова (\b) - это мнимая точка между символами \w и \W. Внутри класса символов '\b' обозначает символ backspace (стирания). Метасимволы \A и \Z - аналогичны '^' и '$', но если начало строки '^' и конец строки '$' действуют для каждой строки в многострочной строке, то \A и \Z обозначают начало и конец всей многострочной строки.
Если внутри шаблона применяется группировка (круглые скобки), то номер подстроки группы обозначается как '\цифра'. Заметьте, что за шаблоном в пределах выражения или блока эти группы обозначаются как '$цифра'. Кроме этого существуют дополнительные переменные:
$+ | - обозначает последнее совпадение |
$& | - все совпадение |
$` | - все до совпадения |
$' | - все после совпадения |
Rename старое_имя новое_имя_файла
rename старое_имя, новое_имя_файла
Переименовать файл. Возвращает 1 в случае успеха, иначе - 0.
Reset выражение reset
reset выражение
reset
Обычно используется в блоках continue циклов для очистки переменных и поиска для повторного применения. Выражение воспринимается как список символов. Для указания диапазона можно применять символ минус '-'. Все переменные и массивы, начинающиеся с этих символов, обнуляются. Если выражение отсутствует, то обнуляется поиск ?шаблон? для повторного поиска. Сбрасываются только переменные текущего модуля.
Return список
return список
Выход из подпрограммы с указанным кодом. Если данная функция отсутствует, то выход из подпрограммы осуществляется с кодом последнего выполненного оператора.
Reverse список
reverse список
В списковом контексте возвращает список с элементами в обратном порядке указанному списку. В скалярном контексте возвращает строку с переставленными символами первого элемента списка.
Rewindir директория
rewindir директория
Устанавливает указатель файлов открытой директории в начало для последующего чтения функцией readdir().
Rindex строка подстрока позиция rindex строка подстрока
rindex строка, подстрока, позиция
rindex строка, подстрока
Подобна функции index , но возвращает позицию последнего вхождения подстроки в строку. Если указана позиция, то просмотр выполняется до нее.
Rmdir директория
rmdir директория
Удалить указанную директорию, если в ней нет никаких файлов. Возвращает 1 при успехе и 0 - при неудаче. При этом переменная $! содержит код (errno).
S///
s///
Оператор подстановки. Смотри главу Операторы.
Scalar выражение
scalar выражение
Вычисляет выражение в скалярном контексте и возвращает результат. В Perl нет специальной функции для принудительного вычисления в списковом контексте, т.к. для достаточно заключить его в круглые скобки.
Seek файл позиция отсчет
seek файл, позиция, отсчет
Установить указатель на произвольную позицию в файле. Если отсчет равен 0 - позиционировать от начала файла, если 1 - от текущего положения, 2 - от конца файла. Возвращает 1 при успехе и 0 - неудаче.
Seekdir директория позиция
seekdir директория, позиция
Установить указатель файла в открытой директории для последующего чтения функцией readdir(). Текущая позиция может быть получена функцией telldir().
Select файл select
select файл
select
Возвращает текущий указатель файла- по умолчанию или делает текущим указанный. Таким образом, если в функциях print или write не указан файл вывода, то это осуществляется в файл, указанный select. Переменные, связанные с выводом, так же действуют на вывод в этот файл.
Select RBITS WBITS EBITS TIMEOUT
select RBITS, WBITS, EBITS, TIMEOUT
Выполняет системный select()
Semctl ID SEMNUM CMD ARG
semctl ID, SEMNUM, CMD, ARG
Системный вызов semctl() для SYSTEM V.
Semget KEY NSEMS FLAGS
semget KEY, NSEMS, FLAGS
Системный вызов semget() для SYSTEM V.
Semop KEY OPSTRING
semop KEY, OPSTRING
Системный вызов semop() для SYSTEM V.
Send SOCKET MSG FLAGS TO send SOCKET MSG FLAGS
send SOCKET, MSG, FLAGS, TO
send SOCKET, MSG, FLAGS
Послать сообщение через сокет. Аналогично системному send().
Setpgrp PID PGRP
setpgrp PID, PGRP
Установить номер группы PGRP процессу с номером PID, 0 - для текущего процесса.
Setpriority WHICH WHO PRIORITY
setpriority WHICH, WHO, PRIORITY
Установить приоритет PRIORITY процессу пользователя WHO и группе WHICH.
Setsockopt SOCKET LEVEL OPTNAME OPTVAL
setsockopt SOCKET, LEVEL, OPTNAME, OPTVAL
Установить параметры сокета. Возвращает неопределенность при ошибке.
Shift массив shift
shift массив
shift
Удаляет первый элемент массива и возвращает его значение. Если массив пустой, то результат - неопределенность. Если аргумент опущен - обрабатывается массив @ARGV в головной программе или @_ в подпрограмме.
Shmctl ID CMD ARG
shmctl ID, CMD, ARG
Системный вызов shmctl() System V
Shmget KEY SIZE FLAGS
shmget KEY, SIZE, FLAGS
Системный вызов shmget() System V
Shmread ID VAR POS SIZE shmread ID STRING POS SIZE
shmread ID, VAR, POS, SIZE
shmread ID, STRING, POS, SIZE
Пишет или читает сегмент общедоступной памяти в System V.
Shutdown SOCKET HOW
shutdown SOCKET, HOW
Прекращает работу сокета методом HOW.
Sin выражение
sin выражение
Возвращает в радианах синус выражения.
и предложений. Единственно что должно
Синтаксис.
Декларации (объявления) Простое предложение Сложные предложения Циклы while Операторы управления циклом next last redo for foreach Блоки и оператор switch Оператор goto POD операторы. Документирование программ Perl программа (скрипт) состоит из последовательности деклараций и предложений. Единственно что должно быть обязательно декларировано, это форматы отчетов и подпрограммы (функции). Все необъявленные переменные, массивы имеют значение 0 или null.
Скалярные значения
Скалярные значения.
Все данные в Perl это скаляры, массивы скаляров и хеши скаляров. Скалярные переменные могут содержать числа, строки и ссылки. Преобразование числа - строки происходит автоматически по умолчанию. Скаляр может иметь только одно единственное значение, хотя это может быть ссылка на массив скаляров. Так как Perl сам преобразовывает числа в строки и наоборот, то программисту нет необходимости думать о том, что возвращает функция.
В Perl не существует типов "строка" или "число" или "файл" или что-то еще. Это контекстно зависимый полиморфный язык для работы с текстами.
Скаляр имеет логическое значение "TRUE" (истина), если это не нулевая строка или число не равное 0.
В Perl существует два типа нулевых (null) скаляров - определенные (defined) и неопределенные (undefined). Неопределенное значение возвращается, когда что-то не существует. Например, неизвестная переменная, конец файла или ошибка. С помощью функции defined() вы можете заранее обнаружить подобное состояние.
Количество элементов массива так же является скаляром и начинается символами $# подобно интерпретатору csh. Фактически $#var1 - это индекс последнего элемента массива. Нужно помнить, что первый элемент имеет индекс 0, поэтому количество элементов определяется как $#var1+1 . Присвоение значения $#var1 изменит длину массива и разрушит "оставленные" значения. Присвоение значения элементу массива с индексом больше чем $#var1 увеличит размер массива, а присвоение ему нулевого списка -обнулит.
В скалярном контексте имя массива возвращает его длину (для списка возвращается последний элемент).
Sleep выражение sleep
sleep выражение
sleep
Приостанавливает работу процесса на указанное число секунд или зацикливается, если аргумент отсутствует. Работа продолжается, если получен сигнал SIGALARM. Возвращает время фактической паузы.
Слияние констант
Слияние констант.
Как и С Perl выполняет возможные вычисления в период компиляции. Так подстановка символов после '\' , операция конкатенации строк, арифметические выражения, содержащие только одни константы, все это делается в момент компиляции, что существенно увеличивает скорость выполнения программы.
Сложные предложения
Сложные предложения.
Последовательность простых предложений, ограниченная функциональными ограничителями, называется блоком. В Perl это может быть целый файл, последовательность предложений в операторе eval{} или чаще всего это множество простых предложений, ограниченных круглыми скобками '{}'.
Существуют следующие виды сложных предложений:
if (EXPR) BLOCKif (EXPR) BLOCK else BLOCK
if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
LABEL while (EXPR) BLOCK
LABEL while (EXPR) BLOCK continue BLOCK
LABEL for (EXPR; EXPR; EXPR) BLOCK
LABEL foreach VAR (LIST) BLOCK
LABEL BLOCK continue BLOCK
Обратите внимание, что сложные предложения описаны в термах блоков, а не предложений, как в языках C или Pascal. Поэтому необходимо всегда использовать круглые скобки для обозначения блока.
Socket SOCKET DOMAIN TYPE PROTOCOL
socket SOCKET, DOMAIN, TYPE, PROTOCOL
Открывает сокет и привязывает его к указателю SOCKET.
Socketpair SOCKET1 SOCKET2 DOMAIN TYPE PROTOCOL
socketpair SOCKET1, SOCKET2, DOMAIN, TYPE, PROTOCOL
Создает "безымянную" пару сокетов в указанном DOMAIN. Возвращает true при успехе и false - неудаче.