- •Введение
- •Немного о cgi
- •Как работает Perl
- •Первая программа на Perl
- •Переменные и типы данных в Perl
- •Строковые данные
- •От простого к сложному
- •Запуск интерпретатора Перл
- •Синтаксис
- •Переменные
- •Встроенные переменные Перл
- •Регулярные выражения (шаблоны)
- •Операторы и приоритеты
- •Встроенные функции
- •Группа системных вызовов
- •Подпрограммы
- •Модули (packages)
- •Форматы
- •Отладка Перл программ
- •Запуск интерпретатора Перл.
- •Ассоциативные массивы в Perl.
- •Что такое Perl?
- •Как Perl обрабатывает данные из форм
- •Как генерируются web-страницы "на лету"
- •В чем различие между программой и скриптом?
- •Альтернативы Perl
- •Что вам требуется, чтобы запустить Perl
- •Где взять Perl
- •Этапы создания скрипта
- •Основные части Perl скрипта
- •Пример скрипта с формой
- •Обсуждение: Настройка скрипта
- •Обсуждение: Чтение данных из формы
- •Обсуждение: Что делать с данными?
- •Обсуждение: Запись в файлы
- •Пример: Создание новой html страницы
- •Пример: Добавление в конец файла
- •Пример: Добавление в середину существующего файла
- •Пример: Отправка данных по e-mail
- •Обсуждение: Создание web-страниц "на лету"
- •Встроенные переменные Перл.
- •Модули (packages)
- •Конструкторы и деструкторы
- •Создание библиотеки
- •Стандартные Перл библиотеки
- •Pragma библиототеки
- •Операторы и приоритеты.
- •Tr/таблица1/таблица2/cds y/таблица1/таблица2/cds
- •От простого к сложному.
- •Переменные
- •Скалярные значения
- •Конструкторы скаляров
- •Конструкторы списков
- •Практический Перл для начинающего.
- •Add_guestbook.Pl - запись в книгу
- •Read_guestbook.Pl - чтение книги
- •Подпрограммы
- •Private переменные
- •Переменные типа local
- •Прототипы (prototypes)
- •Ссылка как параметр
- •Переопределение встроенных функций
- •Автозагрузка
- •Регулярные выражения (шаблоны) Perl.
- •Синтаксис
- •Декларации (объявления)
- •Простое предложение
- •Сложные предложения
- •Операторы управления циклом
- •Цикл for
- •Цикл foreach
- •Оператор goto
- •Pod операторы. Документирование программ
- •4.Языковые конструкции Perl 4.1.Ссылки
- •4.5.Подпрограммы и модули
- •Введение
- •Cтруктуры данных
- •Скалярные величины
- •Простые массивы
- •Ассоциативные массивы
- •Основные понятия
- •Простые операторы
- •Составные операторы
- •Термы и операторы списка
- •Оператор ``стрелка''
- •Экспоненциальный оператор
- •Символьные унарные операторы
- •Операторы связки
- •Бинарные операторы
- •Операторы сдвига
- •Операторы сравнения
- •Операторы эквивалентности
- •Побитовое и, побитовое или и Исключающее или
- •Логическое и и логическое или
- •Оператор диапазона
- •Условный оператор
- •Операторы присваивания
- •Оператор ``запятая''
- •Логическое не
- •Логическое и, или и Исключающее или
- •Оператор чтения из файла
- •Оператор замены строки
- •Оператор замены множества символов
- •Основные понятия
- •Символьные ссылки
- •Регулярные выражения
- •Зарезервированные переменные
- •Встроенные функции
- •Подпрограммы
- •Конструкторы и деструкторы пакетов
- •Объектная ориентация
- •Объекты
- •Вызов метода
- •Деструкторы
- •Установка поддержки perl для iis3 под Windows nt Почему была написана эта заметка
- •Кратко о perl-модулях от Active State
- •Что скачивать
- •Как устанавливать
- •Как проверить
- •Что дальше
- •Введение в Perl Пару слов от автора
- •Краткое лирическое отступление насчет cgi
- •Итак ...Приступим...
- •Переменные среды cgi
- •Прекрасный язык Perl
- •If(условие)оператор;
- •Заголовки запросов и ответов
- •Права Доступа
- •Генерация ответа
- •Обработка Форм
- •Изображения ismap
- •Анимация
- •Несколько советов по отладке
- •Кто посещает мою страничку?
- •Гостевая книга
- •Счетчик посещений
- •Введение
- •Взаимодействие с субд
- •Основные функции доступа
- •Дополнительные функции
- •Переменные
- •Переменные для подстановки
- •Написание модулей cgi
- •Обработка файлов формата dbf
- •Изучаем Perl. Глава 1
- •Происхождение
- •Похож на Си?
- •Стоимость и лицензия
- •Проинсталлирован ли у вас Perl?
- •Ваша первая программа на Perl
- •Создание программы
- •Глава 2
- •Числовые литералы
- •Стринговые литералы
- •Строки с одинарными кавычками
- •Строки с двойными кавычками
- •Строки с обратными одинарными кавычками
- •Массивы
- •Вложенные массивы
- •Использование диапазона значений
- •Глава 3
- •Типы операторов
- •Бинарные арифметические операторы
- •Унарные арифметические операторы.
- •Логические операторы
- •Пример оператора логического "и" - (&&)
- •Пример оператора логического "или" - (||)
- •Пример оператора логического "не" - (!)
- •Битовые операторы
- •Операторы числовых отношений
- •Операторы отношений строк
- •Использование ternary-оператора
- •Оператор интервала ".."
- •Использование оператора интервала
- •Строковые операторы "." и "X"
- •Использование оператора конкатенации
- •Использование оператора репликации (повтора)
- •Операторы присваивания
- •Глава 4
- •Строковые функции
- •Функции для работы с массивами.
- •Немножко о модуле cgi.Pm в Perl.
- •Жемчужные формы
- •Как "оживить" Perl/cgi скрипт Введение
- •Метод 1
- •Метод 2
- •Метод 3
- •Введение
- •Для чего нужен Perl?
- •Структура Perl-программ
Пример оператора логического "или" - (||)
Оператор используется чтобы определить, верно ли какое либо из условий.
Op1 0 1 0 1 |
Op2 0 0 1 1 |
Op1||Op2 0 1 1 1 |
В программе ниже проверяется, равна ли переменная $firstVar 9, а переменная secondVar 10. Если хотя бы одно из этих условий истинно (или они оба истинны), то печатается строка "Error!". if ($firstVar == 9 || $firstVar == 10) { print("Error!"); }
ВНИМАНИЕ! Если первое условие выполняется (первый операнд равен "истине"), то вычисление второго условия не происходит. Если вы не будете достаточно внимательны, это может быть источником очень трудно вылавливаемых ошибок. Например: if ($firstVar++ || $secondVar++) { print("\n"); } если переменная $firstVar равна "истине", то инкремент переменной $secondVar проводиться НЕ будет. Вы также можете попробовать применить такую конструкцию: if ($firstVar == (9 || 10)) { print("Error!"); }; чтобы определить, равна ли переменная $firstVar 9 или 10. Ни в коем случае не делайте этого. Perl в этой ситуации сработает несколько по-другому, - совсем не так, как вы ожидали. Сначала выражение "9||10" будет рассмотрено, как равное 9, а за тем будет произведена проверка на равенство переменной $firstVar 9. Правильно будет написать так: if ($firstVar == 9 || $firstVar == 10) { print("Error!"); }; Никогда не забывайте подобных особенностей языка Perl.
Пример оператора логического "не" - (!)
Сей оператор предназначен для преобразования отрицательных значений переменных в положительные и наоборот. Другими словами, Perl просто инвертирует значения. Любое значение, отличное от нуля, Perl рассматривает как "истинное".
Op1 0 1 |
Op2 1 0 |
Пример: $firstVar = 10; $secondVar = !$firstVar; if ($secondVar == 0) { print("zero\n"); };
Здесь переменной $firstVar присваивается значение 10. Затем переменной $secondVar присваивается значение 0, - потому что результат логического отрицания числа 10 будет 0. Потом производится проверка на равенство переменной $secondVar нулю, и если это так, то печать сообщения "zero". Таким образом, в любом случае на экран будет выведено "zero".
Битовые операторы
Битовые операторы по своему действию похожи на логические, за тем только исключением, что битовые операторы производят действия, как и следовало ожидать, над битами. op1 & op2 - Оператор "И" сравнивает два бита и генерирует результат "истина", если оба бита равны 1, иначе - "ложь" op1 | op2 - Оператор "ИЛИ" сравнивает два бита и генерирует результат "истина", если биты комплиментарные, иначе - "ложь". op1 ^ op2 - Оператор "Исключающее ИЛИ" сравнивает два бита и генерирует результат "истина", если один из битов (или они оба) равен 1, иначе - "ложь". ~op1 - Оператор "Дополнение" используется для инверсии всех битов. op1 >> op2 - Оператор "Сдвиг вправо" сдвигает все биты операнда вправо, теряя при этом правый крайний бит, - левый крайний бит становится равным 0. Каждый сдвиг битов операнда вправо равносилен его делению на 2. op1 << op2 - Оператор "Сдвиг влево" сдвигает все биты операнда влево, теряя при этом левый крайний бит, - правый крайний бит становится равным 0. Каждый сдвиг битов операнда вправо равносилен его умножению на 2. Замечание - битовые операции могут проводиться ТОЛЬКО над операндами целого типа.
Битовые операторы используются, чтобы изменять значения отдельных битов операнда. Один байт компьютерной памяти на самом деле состоит из 8-и битов, каждый из которых можно рассматривать, как флаг, - потому что каждый бит может быть равен 0 или 1, - "истина" или "ложь". Флаговые переменные обычно используются для индикации статуса чего-либо. Например, если у вас имеется файл только для чтения, вы можете пометить этот факт заданием переменной-флага $readOnly, которая может быть равна только 1 либо 0. И задавая значение этой переменной в 0 или 1, вы можете определять этот файл как доступный для записи или же только для чтения. Но если у вас несколько флагов, то выделять под них несколько переменных было бы слишком расточительно. Лучше использовать в качестве флагов отдельные биты одной переменной. Таким образом, в одной "обычной" переменной вы можете хранить как бы несколько маленьких, значением любой из которых может быть только ноль или единица. Это наглядно демонстрируется ниже.
Использование операторов "&", "|", "^"
Для начала определимся, какие биты нашей переменной каким целям будут служить. Допустим, мы хотим хранить в переменной информацию о шрифте. При этом у нас есть такой расклад: 7 бит - италик (наклонный) 6 бит - жирный 5 бит - инверсный 4 бит - подчеркнутый 3 бит - двойное подчеркивание 2 бит - зарезервирован 1 бит - зарезервирован 0 бит - зарезервирован Теперь чтобы установить тип шрифта как наклонный, нам нужно всего лишь установить 7-й бит в единицу, то есть присвоить переменной число 128: $textAttr=128.
Теперь давайте попробуем установить шрифт как наклонный, но в то же время и подчеркнутый. За подчеркнутый шрифт у нас отвечает бит номер 4, и если он установлен в единицу, то значение переменной равно 16. Чтобы скомбинировать значения 128 и 16 в этой переменной, мы применим битовый оператор "|" - $textAttr=128|16. То же при использовании двоичных чисел - $textAttr=10000000|00010000 (что будет равно 10010000). То есть, у нас биты номер 7 и номер 4 установлены в единицу, что подразумевает использование наклонного подчеркнутого шрифта. Если получившееся значение перевести в десятичную систему, то получим число 144.
Следующий пример показывает, как теперь выключить использование наклонного шрифта. Для этого используем оператор "Исключающее ИЛИ": $textAttr=$textAttr^128.
Пример: использование операторов сдвига - "<<", ">>"
Операторы сдвига используются для сдвига всех битов операнда вправо или влево на заданное количество позиций. Они весьма удобны, когда вам нужно поделить или умножить значение целого типа.
Этот пример показывает, как делить число на 4, используя оператор сдвига вправо: $firstVar = 128; $secondVar = $firstVar >> 2; print("$secondVar\n"); значение переменной $firstVar (128) делится на 4 путем сдвига вправо всех битов переменной на 2 позиции, а за тем присваивается переменной $secondVar. Результатом деятельности будет 32.
Но в то же время, если вы таким образом поделите на 8 число 129, то получите неверный ответ - 16. Так происходит, потому что 129 - это 10000001 в двоичной системе, и при сдвиге вправо правый крайний бит теряется.
А в этом примере вы увидите, как производится умножение с помощью оператора сдвига влево: $firstVar = 128; $secondVar = $firstVar << 3; print $secondVar; здесь число 128 умножается на 8 (2 в 3-й степени) и результатом будет 1024.
Число 1024 выходит за рамки 8-битной переменной, поэтому вполне возможно, что в вашем интерпретаторе Perl у вас будут проблемы - может быть, вы получите сообщение об ошибке, а может просто неправильный ответ - уточните этот вопрос в документации к вашему интерпретатору Perl. Обычно под переменную скалярного типа отводится 4 байта (то есть 32 бита).