| 
 Урок 19. Функции для работы со строками 
Функция Chomp 
chomp переменная;
chomp список;
chomp; 
Удаляет в конце строки символ указанный переменной $/. Обычно это '\n'. Возвращает количество удаленных символов. Если переменная не указана то используется переменная $_. Если указан список то обрабатывается каждая строка списка и возвращается общее количество удаленных символов. 
Функция Chop 
chop переменная;
chop список;
chop;
 
Полностью аналогично функции chomp но всегда удаляет последний символ строки.
 
Функция Chr 
Возвращает символ с заданным ASCII кодом. 
Функция Lc 
Преобразовать строку в буквы нижнего регистра. 
Функция Lcfirst 
Заменить первую букву строки на малую. 
Функция Length 
Возвращает длину строки выражения. 
Функция Ord 
Возвращает ascii код первого символа выражения. 
Функция Uc 
Возвращает строку выражения, в которой малые буквы заменены на заглавные. 
Функция Ucfirst 
Возвращает строку выражения, в которой первая буква заменена на заглавную. 
Функция Substr 
substr (выражение, смещение, длина); 
substr (выражение, смещение); 
Возвращает подстроку выражения, начиная со смещения и заданной длины. Если смещение отрицательное, то отсчет ведется от конца строки. Если длина не указана, то берется все до конца строки.  
Функция Pack 
pack (шаблон, список); 
Упаковывает список в двоичную структуру по шаблону. Шаблон - это строка символов, описывающая порядок и тип упакованных значений. 
 - A - текстовая строка,
 добавляется пробелами. 
 
 - a - текстовая строка,
 добавляется 0 символом. 
 
 - b - битовая строка
 (возрастающая нумерация бит) 
 
 - B - битовая строка
 (убывающая нумерация бит) 
 
 - h - шестнадцатеричная
 строка ( младший байт - первый) 
 
 - H - шестнадцатеричная
 строка (старший байт первый) 
 
 - c - символ со знаком 
 
 - C - символ без знака. 
 
 - s - короткое целое (один
 байт) со знаком. 
 
 - S - короткое целое без знака.
 
 
 - i - целое (два байта) со
 знаком. 
 
 - I - целое без знака. 
 
 - l - длинное целое (4 байта) со
 знаком. 
 
 - L - длинное целое без знака. 
 
 - n - короткое в "сетевом"
 формате. 
 
 - N - длинное в "сетевом"
 формате. 
 
 - v - короткое в "VAX"
 формате. 
 
 - V - длинное в "VAX"
 формате. 
 
 - f - single float. 
 
 - F - double float. 
 
 - p - указатель на строку
 ограниченную 0. 
 
 - P - указатель на структуру с
 фиксированной длиной. 
 
 - u - упаковка uuencode. 
 
 - x - нуль-байт 
 
 - X - резервный байт. 
 
 - @ - заполнить нулями
 позицию. 
 
 
За каждой буквой может стоять
число означающее количество
повторов. Для всех типов за
исключением 'a', 'A', 'b', 'B', 'h' и 'H',
упаковывается максимально
возможное количество значений из
списка. Символ '*' после типа
означает использовать оставшиеся
параметры. Тип 'a' и 'A' использует
только одно значение из списка и
добавляет остаток поля либо
нуль-символами, либо пробелами (при
распаковке по типу 'A' пробелы и нули
отбрасываются, а по 'a' - нет). Типы 'b'
и 'B' упаковывают строку в указанное
число бит. Так же как и 'h' и 'H' в число
ниблов (байт). 'P' - упаковывает
указатель на структуру с указанной
длиной. Числа с плавающей запятой
(floats и double) записываются в
стандартном для каждой машины
формате и могут быть разными для
разных типов машин. Заметьте, что Perl
всегда использует двойную точность
(double), поэтому упаковка и распаковка
по типу 'f' приведет к потере
точности. Шаблоны для распаковки и
упаковки совершенно одинаковы.  
print(pack("ccc",65,66,67)); 	 # Результат ABC
print(pack("A4A3","ab","cdefg"));	 # "ab cde"
print(pack("a4a3","ab","cdefg")); 	 # "ab\0\0cde"
Функция Unpack 
unpack (шаблон, выражение); 
Функция, обратная pack(). Распаковывает строку выражения по указанному шаблону в массив значений. В скалярном контексте возвращает значение только первого элемента. Шаблоны такие же как и в pack().  
Символ '%' в шаблоне означает, что вы хотите получить вместо значения его контрольную сумму. По умолчанию - 16-битную. 
* * * * 
Напишите программу, выводящую латинский алфавит. ASCII код первой буквы алфавита - 65. В латинском алфавите 25 букв.
 
Попробуйте записать в файл IP адрес, затем считать его и сравнить (программно с помощью оператора IF) его с текущем IP адресом. Почему, как вы думаете, они не совпали? 
запись IP адреса осуществляйте такой строкой: 
print "$ENV{'REMOTE_ADDR'}\n";
 
[Содержание] 
[Вступление] 
[необходимое для начала изучения] 
[урок 1] 
[урок 2] 
[урок 3] 
[урок 4] 
[урок 5] 
[урок 6] 
[урок 7] 
[урок 8] 
[урок 9] 
[урок 10] 
[урок 11] 
[урок 12] 
[урок 13] 
[урок 14] 
[урок 15] 
[урок 16] 
[урок 17] 
[урок 18] 
[урок 19] 
[урок 20] 
[урок 21] 
[урок 22] 
[урок 23] 
[урок 24] 
[урок 25] 
[урок 26] 
[урок 27] 
[урок 28] 
[правила хорошего тона] 
[приложение A] 
[приложение Б] 
[приложение В] 
[заключение] 
[благодарности] 
 
  |