Переменные и типы данных в Perl



Введение

Язык Perl был создан в 1986 г. и первоначально предназначался для обработки текстов. Отсюда и его название - Practical Extraction and Report Language (язык извлечения и составления отчетов), хотя иногда его называют Pathologically Eclectic Rubbish Lister (патологически эклектичный мусорный листер). Не стоит спорить о том, какое из этих названий более правильное, потому что оба они принадлежат Ларри Воллу (Larry Wall), создателю и главному архитектору, распространителю и опекуну языка Perl.

Ларри создал этот язык, когда пытался формировать отчеты из иерархии файлов системы оповещения об ошибках, похожей на Usenet-новости, а возможности применявшегося в то время обработчика потоков данных awk оказались исчерпанными. Будучи настоящим (т. е. ленивым) программистом, Волл решил вырвать данную проблему с корнем, применив для этого какой-нибудь универсальный инструмент, который он надеялся использовать и в дальнейшем. В результате появилась первая версия языка Perl (в настоящее время текущей версией является версия v.5.6.0 и готовится к выходу Perl v.6)

Прошли годы, и теперь Perl используется для решения гораздо более широкого круга задач. Это один из самых популярных языков для написания CGI-скриптов (программ для WWW), благодаря чему в последние годы его популярность резко пошла вверх.

Основное применение Perl

 

Наибольшее распространение Perl получил, как мы уже сказали, при написании CGI-программ. Вы отлаживаете программу на своем домашнем компьютере (где, к примеру, установлена операционная система Windows), а затем просто копируете ее на сервер (где, скорее всего, установлен один из клонов Unix - FreeBSD, Linux, Sun Solaris, HP-UX и т. п.). При смене провайдера проблем с переносом скриптов также не будет. Согласитесь, что это очень удобно!

Однако для начала необходимо разобраться с понятиями. CGI-скрипт - это программа, которая выполняется на Web-сервере по запросу клиента (т. е. посетителя Web-сайта). Программа эта принципиально ничем не отличается от обычных приложений, которые установлены на вашем компьютере - будь то MS Word или игра Quake. CGI - это не язык программирования, на котором написан скрипт, а Common Gateway Interface - специальный интерфейс, с помощью которого происходит запуск скрипта и взаимодействие с ним.

Правда, есть один довольно неприятный момент: на сервере, где находится ваш сайт, должно быть разрешено выполнение cgi-скриптов. Дело в том, что скрипт, как и любая другая программа, может выполнять системные команды на сервере, что представляет потенциальную угрозу безопасности. Так что если вы разместили свой сайт на бесплатном сервере, например Xoom или Chat.Ru, то вы не сможете запускать скрипты. Впрочем, некоторые бесплатные серверы допускают использование CGI, например I-Connect. Ну а если вы платите за размещение Web-сайта, то, как правило, использование cgi-скриптов разрешено.

Как работает CGI-скрипт? Можно, конечно, привести какое-нибудь техническое руководство, но пользы от этого будет мало. Поэтому расскажу, как все происходит, своими словами. Итак, посетитель вашей страницы заполняет поля формы, например для записи в гостевую книгу. После этого он нажимает кнопку Submit, которая и запускает cgi-скрипт. Скрипт выполняет запрограммированные действия - в данном случае считывает данные из формы и пишет их в файл гостевой книги - и посылает в броузер посетителя обычный HTML-код, например, сообщение: "Спасибо, что вы оставили запись в гостевой книге".

Преимуществ CGI-скриптов перед JavaScript и Java, на мой взгляд, три, и они весьма значительны:

  • поскольку программа выполняется сервером, не имеет значения, какой у посетителя броузер - Lynx или, скажем, Internet Explorer. Нет никаких глюков и сообщений об ошибках;
  • cgi-скрипты позволяют реализовать гораздо более широкий набор функций;
  • код cgi-скрипта закрыт для конкурентов.

Немного о CGI

CGI ( Common Gateway Interface) представляет собой общий интерфейс, который используется сервером для обеспечения взаимодействия с любым приложением. CGI-скрипты играют роль связующего звена между приложением и сервером, а сервер, в свою очередь, отвечает за получение информации от броузера и отсылки ему данных. Со стороны CGI-скрипта как серверного процесса все взаимодействие выглядит следующим образом:

  1. Получение данных от клиента.
  2. Обработка данных.
  3. Выдача ответа клиенту.

Прием данных от клиента
Взаимодействие с клиентом обеспечивается так: он заполняет форму своими значениями, нажимает на кнопку submit, броузер кодирует данные соответствующим образом и отправляет их серверу.
Выдача данных клиенту
Обычно клиенту выдают текст в формате HTML (ничто не мешает вам отправить ему и картинку/видео). Для того чтобы сервер и клиент вас поняли, необходимо сказать, что вы выдаете c помощью заголовка Content-Type: mime-type/mime-subtype.
Пример:
print "Content-Type: text/html\n";
# Мы выдаем текст в формате HTML.
# Также можно: text/plain - простой текст,
# в браузере отобразится аналогично тексту,
# заключенному между тегами
# <pre></pre>. image/gif - Картинка, формат gif
# video/mpeg - mpeg-видео. И целая куча других
# форматов, см. файл mime.types из apache
print "\n";
# <- еще одна пустая строка, обозначает
# конец вывода наших заголовков.
# Теперь мы можем написать свой текст клиенту
print qq{
<html>
<head>
<title>Моя первая CGI программа</title>
</head>
<body>
<h1>Моя первая CGI программа</h1>
</body>
</head>
};

"Да, но я только начал изучать Perl", - скажете вы. Не беда! Для того чтобы наладить работу скриптов на вашем сайте, глубокого знания языка программирования не требуется. В Сети лежит просто немереное количество абсолютно бесплатных скриптов на любой вкус: от гостевых книг до сложных баз данных. Все, что вам нужно, хотя бы начальные знания английского языка. Скачать любой скрипт можно с сайта www.cgi-resources.com. Это специализированный каталог, содержащий ссылки на тысячи скриптов на самых разных языках программирования.

Предположим, вы решили использовать скачанный из Сети скрипт. Чтобы он у вас нормально работал, нужно сделать следующее:

В начале скрипта указываются некоторые данные, необходимые для его запуска, например путь к интерпретатору Perl (обычно /usr/local/bin/perl/ или просто /usr/bin/perl/), URL вашего сайта, имя файла, в который будут записываться результаты выполнения скрипта и т. п. Все строки, которые следует заменить, обычно выделены комментариями, так что вы их легко найдете.

Символы, используемые при операциях с файлами
Знак Функция Совместим с Несовместим с
< Открытие для чтения. Если файла нет - возникает ошибка < > и <
> Создание файла для записи. Чтение также возможно > и + <
+ Открытие для чтения/записи > и < Нет

Возможны также следующие комбинации:

Комбинация

Функция

<+

Открыть для чтения/записи. При отсутствии файла возникает ошибка

+>

Создать файл для чтения/записи. Если файл существует - его содержимое теряется

>>

Открыть или создать для дополнения

+>>

Открыть или создать для чтения/записи

В зависимости от конфигурации Web-сервера имя скрипта должно иметь определенное расширение и/или он должен находиться в определенном каталоге. Например, имя скрипта должно иметь расширение .cgi, и скрипт должен лежать в каталоге cgi-bin. Проконсультируйтесь у администратора вашего сервера обо всех предъявляемых требованиях.

Поскольку скрипт - это программа, нужно присвоить ему атрибут "исполняемый".

Если скрипт пишет данные в какой-нибудь файл (например, файл гостевой книги), то этот файл должен быть доступен для записи.

Впрочем, пользоваться плодами чужого трудом не всегда полезно, поэтому давайте создадим свой скрипт, посвященный нижеуказанным проблемам.

Как работает Perl

Perl - это интерпретируемый язык программирования, т.е. написанные программы анализируются в момент их исполнения и не требуют предварительной компиляции (сборки). Благодаря этому, грамотно написанный Perl-скрипт (из-за того, что Perl является интерпретируемым языком, программы на нем называют скриптами) может работать как в Unix, так и в Windows, как на x86 процессорах, так и на Alpha или Power PC. Этим он резко отличается от языка C, где программу перед использованием необходимо откомпилировать, а полученный код зависим от используемой операционной системы и процессора. Perl перед выполнением программы полностью разбирает ее и компилирует в свой внутренний формат. Это значит, что после начала работы вы никогда не получите сообщения о синтаксической ошибке и что пробельные символы и комментарии не замедляют ход выполнения программы. Такой метод обеспечивает быстрое выполнение операций языка Perl и является дополнительным стимулом к отказу от использования С в качестве служебного языка. Но процедура компиляции все же требует времени, и применение большой Perl-программы, которая быстро выполняет одну маленькую задачу (из множества тех, которые она способна выполнить), а затем заканчивает свою работу, не будет эффективным, ибо время ее выполнения окажется ничтожно малым по сравнению со временем компиляции.

С одной стороны, Perl - это компилятор, потому что перед выполнением первого оператора программы она полностью считывается и разбирается. С другой стороны, он - интерпретатор, потому что никакого объектного кода, занимающего место на диске в ожидании исполнения, в данном случае нет. Другими словами, он сочетает в себе лучшее из компилятора и интерпретатора.

Perl по сравнению с С++

 

Внешне структура написания программ на Perl напоминает языки C/C++. В Perl существуют те же самые операторы и управляющие структуры, что и в C/C++: if, for, while, until, printf, но Perl не поддерживает указателей и структур данных. Однако это компенсируется богатыми возможностями Perl при работе с текстом и массивами.

Основное назначение языка - создание утилит, обработка Web-страниц, а также использование его как связующего звена между базой данных на сервере и пользователем Сети. Для Perl есть библиотеки, позволяющие работать с большинством SQL-серверов, использование которых становится популярным в последнее время. Но это не значит, что Perl не годится для всего остального - нами были указаны только основные сферы применения языка.

Написание и запуск программ

Есть специальные редакторы для написания программ на Perl, например PerlBuilder, но можно использовать любой удобный вам текстовый редактор. Неплохо для написания скриптов приспособлен редактор Allaire HomeSite.

Для того чтобы выполнить приведенные ниже примеры, необходимо записать их в файл и запустить следующую команду:

perl имя файла.perl

 

Это лучше делать не сразу из win32, а в среде файловых менеджеров FAR или NC, иначе окно может закрыться так быстро, что вы ничего не увидите. На компьютерах под управлением операционной системы Windows ассоциируют Perl.exe с расширением .pl и используют его при создании Perl-скриптов. Там, где установлена операционная система Unix, необходимо назначить скрипту атрибут "выполняемый" и запускать как отдельную программу.

Если записать первую строчку в скрипте:

#!/usr/bin/perl,

где указать полный путь к Perl, то под Windows данная строчка будет пропущена, а под UNIX позволит запускать скрипт как самостоятельную программу.

Первая программа на Perl

 

Как и полагается, первой рассматриваемой программой на Perl будет вывод строчки 'Hello World!'. Ниже приведено пять примеров программы (синтаксис Perl позволяет сделать это несколькими способами):

#Program Hello World! print "Hello World\n"; #Program Hello World! print (‘Hello World’,"\n"); #Program Hello World! print ‘He’.(‘l’x2).’o World’."\n"; #Program Hello World! printf ("%s\n", ‘Hello World’); #Program Hello World! print sprintf ("Hello World\n");

Cтрока, которая начинается с символа '#', - это комментарий. Все, что написано после знака '#', игнорируется. Это единственный способ написания комментариев в Perl.

Как видите, в отличие от других языков в Perl нет так называемой "точки входа" или функции main(), программа начинает выполняться с первой строчки. Perl требует обязательного наличия ';' в конце каждого оператора. Скобки в функциях необязательны, и их наличие необходимо только в случае возникновения двусмысленности, а так это дело вкуса. Двойные и одинарные кавычки в языке различаются. В случае двойных кавычек Perl выполнит преобразование текста в них: вставит переменные и специальные символы, если вы их указали. В одинарных же кавычках текст изменен не будет. Поясним на примере:

print "Hello World\n"; #напечатает Hello World, #а ‘\n’ переведет курсор на новую строку print ‘Hello World\n’; #напечатает ‘Hello World\n’ print "summa: $a"; #вместо переменной $a Perl подставит ее значение.

Функция print, как видно из примера, выводит некоторую строчку на экран, хотя при помощи нее можно также писать в файл или устройство.

На этом закончим знакомство с первой программой на Perl и пойдем дальше.

Переменные и типы данных в Perl

Данные - одна из самых важных частей любой программы. Perl автоматически определяет тип используемых вами данных. Язык делит данные на численные, строковые, списки и хеши (Hash). Есть еще заголовок HANDLE, он выдается при открытии файла или потока. Можно также использовать ссылки на другие переменные, но сделано это совершенно не так, как в других языках. Давайте рассмотрим примеры:
print 5; # 5 print 6+2; # 8 print ‘Privet’; # privet $kuda= "res"; $$kuda=5; # занесет число 5 в переменную res (ссылка).

Двойной знак '$' означает: занести значение в переменную, имя которой хранится в переменной.

Для удобства целочисленные данные можно вводить несколькими способами.

Десятичные: 23, 2.6, 3.14, 1E6, 23_000.

Шестнадцатеричные: 0xFF, 0x2395FABC.

Восьмеричные: 0и113, 077 (0 - признак восьмеричного числа).

Вот как это записывается:

print 1E6; # 1000000 print 23_000; # 23000 print 0xFF; # 255

Стоит особо отметить, что для внутреннего представления чисел Perl использует тип с плавающей запятой (double). Однако в контексте он их различает (например, количество байт для записи в файл) и автоматически преобразовывает. Также в Perl есть так называемые булевы (boolean) переменные, которые в принципе являются численными. Они могут принимать только два значения: 'истинно'(TRUE) и 'ложно'(FALSE).'Истинно' равносильно любому числу, кроме нуля, 'ложно' - это всегда нуль.

Синтаксис языка

 

Программа, написанная на Perl, исполняется сверху вниз, один раз (но никто не мешает вам использовать циклы) с очень свободным синтаксисом. Переменные в Perl возможно объявлять в любом месте программы, тип переменной (целое, строка...) не указывается, Perl сам его устанавливает в зависимости от содержания строки:

$num = 5; #число $str = "Privet"; #строка

Скаляр (скалярное значение) - это число, строка, значение булевого типа, но не список значений и не массив (включая ассоциативные массивы). Таким образом, скаляр - это только одно значение. Знак '$' перед именем переменной указывает, что данные надо рассматривать как скаляр. Имя переменной может содержать английские буквы, символ '_' и цифры. Начинаться с цифры переменная не может. Имена переменных (да и названия функций) чувствительны к регистру. Переменные $a и $A - это разные переменные.

Объявление переменной в Perl - эквивалентно присвению ей значения. До тех пор пока переменная не существует, Perl считает ее значение равное undef. Это не просто '0', а именно признак того, что у переменной нет значения. При использовании такой переменной для числовых операторов undef преобразуется в 0, для строковых - в пустую строку "". Проверить, есть ли значение у переменной, позволяет функция defined. Функция defined возвращает 1 (TRUE), если ее параметр не равен undef, и возвращает undef в противном случае.

Декларация - это объявление переменной или функции, а оператор - одна законченная лексема, например:

print 4+4; #оператор open file,"file" or die "End of program"; #еще один оператор

Один или более операторов и деклараций, которые заключены в фигурные скобки '{ }', называют 'блоком'. Блок имеет смысл в функциях, циклах и операторах сравнения.

Разделитель в Perl один - ';'. Как уже говорилось, язык не требует его в отладчике, но требует в конце строки (между операторами, если быть точнее) в скриптах. Не обязателен он только после последнего оператора в блоке.

Строковые данные

  Данные, содержащие строку символов, называют строковыми (или стрингами). Простейшие примеры:
$name='Roman'; $town="Moscow"; $country=Russia;

Обратите внимание на последний пример. В нем отсутствуют кавычки, но это не ошибка. Perl позволяет их не писать, но при запуске такого скрипта с ключом -w вы получите предупреждение о том, что 'возможно совпадение с именем функции в будущих версиях'. Это значит, что если в Perl появится функция Russia, то в $country будет занесено значение, которое она (функция) вернет, а не строчка Russia. Отсюда правило: лучше кавычки или апострофы указывать, это позволит избежать лишних предупреждений и возможных ошибок.

Уместно будет напомнить, что все, что находится в кавычках, подлежит преобразованию, т. е. замене имен переменных на их значения, \n (и подобных) на соответствующие спецсимволы.

Списки значений и массивы

 

Список - это несколько скалярных величин. Массив - переменная, которая содержит этот список. Для обозначения массивов используют символ '@'.

@names = ('Москва', 'Екатеринбург', 'Питер'); # заносит три имени в массив @digits = (0..9); # 0,1,2,3,4...9

Как видите, при помощи оператора '..' можно включать сразу несколько величин. Для доступа к элементам массива используется индекс в квадратных скобках. Первый элемент массива имеет номер 0. И самое главное! Если вам нужен один элемент, то имя должно начинаться на '$', обозначая скалярную величину. Впрочем, лучшее объяснение - это примеры:

@names = ('Москва', 'Екатеринбург', 'Питер'); # заносит три имени в массив @digits = (0..9); # 0,1,2,3,4...9 @names2 = (@names,'Киев'); # теперь у нас массив из 4 имен print $names2[1]' # Perl заметьте, использует знак '$' @somedigits=@digits[1..3,6,7..9]; # теперь у нас 1,2,3,6,7,8,9 # ведь первый элемент - нулевой индекс print @somedigits; # распечатаем... # 1236789 $,=" "; # установим разделитель print @somedigits; # распечатаем более красиво # 1 2 3 6 7 8 9

В этом примере использовалась предопределенная переменная '$,'. Значение, занесенное в нее, будет разделителем при печати. Это особенно удобно в нашем случае, т. к. в функцию print передается несколько значений.

Хеши

Хеши (Hash) являются одной из самых удачных находок языка Perl и применяются в программах чрезвычайно широко. Более того, они почти не имеют аналогов в других языках программирования. Что же это такое? Хеш представляет собой набор пар "ключ-значение". При этом как ключ, так и значение могут иметь любой тип: числовой, строковый и т. д. Ключ используется для доступа к значению.

При обращении к значению, соответствующему неизвестному ключу, возвращается значение undef.

Примеры работы с хэшем:
Действие Синтаксис
Объявление переменной типа хэш %MyHash;

Присвоение значения ключу.

Если заданный ключ отсутствует, создается новая пара $MyHash{‘NewKey’}=$NewValue;
Изменение значения $MyHash{‘NewKey’}+=3;
Чтение значения $Result=$MyHash{‘NewKey’};

Файловый ввод/вывод. Простейший счетчик посещений

 

Практически ни один сценарий не может обойтись без операций ввода/вывода. В настоящем примере рассмотрены основные принципы осуществления этой операции на языке Perl. При работе с Perl надо учитывать, что он ведет свое происхождение от Unix и несет отчетливый отпечаток ее идеологии. Это ярко проявляется в подходе к операциям файлового ввода/вывода как к операциям с потоками.

Начнем с создания и открытия файлов. Обе эти операции осуществляются одной и той же функцией - open. В простейшем случае ее вызов выглядит так:

open("Имя потока", "имя файла");

Имя потока - это название потока, который должен быть связан с файлом. В программе для обращения к файлу мы должны использовать именно его. Имя файла - название файла, с которым мы хотим поработать. Использование двойных кавычек с точки зрения Perl означает, что заключенное в них выражение представляет собой строку.

Первое, что обращает на себя внимание, - отсутствие указания в явном виде на то, для какой именно цели файл открывается. Так, если файл уже существует, должен ли он быть очищен или нет. Можно в этот файл записывать информацию, или он предназначен только для чтения? Естественно, при использовании функции open все это на самом деле указывается, но в виде символов, добавляемых перед именем файла. Для этого применяются всего три символа, причем некоторые могут комбинироваться между собой.

Когда файл открыт, вывод из него выполняется крайне просто - присвоением переменной значения. Еще раз напомним, что язык Perl определяет типы данных самостоятельно. На практике такой способ чтения данных эквивалентен простому чтению строки. Несколько строк за один вызов прочитать нельзя (хотя в принципе можно присвоить переменной все содержимое файла). Поэтому приходится выполнять чтение в цикле. Впрочем, в простейшем счетчике нам достаточно прочитать только одну строку.

Наконец настало время посмотреть на текст программы простейшего счетчика посещений. Первая строка программы - обязательный комментарий, указывающий путь к интерпретатору Perl. Понятно, что в зависимости от его реального расположения на диске она может меняться.

То, что приведено здесь, является настолько упрощенным вариантом, что его даже нельзя назвать счетчиком посещений. Это только счетчик показов страницы. Так, он будет срабатывать при любой перезагрузке страницы, даже если она выполняется одним и тем же пользователем, причем непрерывно. Кроме того, поскольку этот счетчик работает с фиксированным именем файла, его нельзя установить на несколько страниц сразу.

Текст программы счетчика
#!/usr/bin/perl   #Простейший счетчик. При каждом вызове увеличивает   #значение, хранящееся в файле с именем count.cnt   #на единицу и возвращает новое значение.   #Авторы — Леонид Садофьев, Лариса Работнова   $counterfile="count.cnt";   #имя файла, содержащего значение счетчика   unless (open(COUNTER,"+<$counterfile"))   #если не удалось открыть файл   {   $counter=0;   #обнуляем значение счетчика   }   else   #если файл открыт успешно,   {   $counter=<COUNTER>;   #читаем значение счетчика   #(кстати, именно так и читается весь файл)   }   close(COUNTER);   #закрываем файл   $counter=$counter+1;   #увеличиваем счетчик на единицу   open(COUNTER,"+>$counterfile");   #открываем файл со сбросом содержимого   print COUNTER $counter;   #записываем новое значение счетчика   close (COUNTER);   #закрываем файл   print "Content-type: text/html\n\n";   #вот так должен начинаться ответ CGI-сценария.   #Пустая строка — обязательна   print <<EOF   #Теперь можно генерировать HTML страницу   <html>   <head>   <title>Counter value</title>   </head>   <BODY>   <center>   <br>   $counter   <br>   </body>   </html>   Счетчик может быть вызван через директиву включения типа   <!—#include virtual="cgi-bin/visitor.cgi"—> или   с помощью тэга HTML image src.   (Или <!—#exec cgi=.... — >) Естественно, на вашем   сервере счетчик может быть размещен в другом каталоге,   а не только в cgi-bin.

Как вы понимаете, с помощью Perl можно создать множество других полезных программок. Не останавливайтесь на приведенных примерах, попробуйте что-нибудь свое, посмотрите рекомендованные книги, и вы увидите, как велики возможности этого замечательного языка программирования.

В книге приводятся начальные сведения по новому языку программирования Perl. Данный язык получил широкое распространение в связи с развитием компьютерной сети Интернет. Все примеры в книге проверены для Perl версии 5.003 операционной системы Unix FreeBSD 2.1.0. Для программистов, системных администраторов и пользователей компьютеров.

(C) Маслов Владимир Викторович.

От простого к сложному

Прежде чем приступить к последовательному ознакомлению сне знакомым для вас языком, должен оговориться и сказать, чтовсе примеры да и сам язык описанию которого посвящена эта книгаэто Perl версии 5.003 для операционной системы FreeBSD версии2.01. Существуют реализации этого языка для операционныхсистем OS/2 , MS-DOS и Windows NT но они немного отстают повозможностям от оригинала, рожденного в недрах Юникса. Пример 1 Введите в файл test1.pl следующие строки:           #!/usr/local/bin/perl          # Содержимое файла test1.pl          print "Наше Вам с кисточкой!\n"; А теперь подробно разберем каждую строку. #!/usr/local/bin/perl   Данная строка должна быть первой в любой Пел-программе.Она указыванет системному интерпретатору что данный файл - это Пел-программа. # Содержимое файла test1.pl   Эта строка называется комментарием. Она всегда начинаетсясимволом '#' и заканчивается таким объяснением что как говорилвеликий Ходжа Насреддин "это тонкий филосовскийвопрос", а говоря простым языком здесь можно писать все что угодно.Даже пожелание руководству. Уж здесь оно точно до него недойдет. print "Наше Вам с кисточкой!\n";   Самая последняя ну и конечно главная. Она просто выводитна экран надпись "Наше Вам с кисточкой!". Здесь слово print - это команда "вывести". Все что в кавычках - это символы,\n - перевод строки и ';' - признак конца команды. Он обязателен.В одной строке может быть несколько команд и все они должны завершатьсясимволом ';'. После него может быть символ '#' - это значит остатокстроки считается комментарием. Над этой строкой авторупришлось больше всего поломать голову так как в нее постояннолезли какие то странные "hello", "hello all", "Построемся и спасемся","Строй наше спасение" и т.д и т.п. Если вы никогда не работали с Пел, то бъюсь на спор в 10$, что даннаяпрограмма сразу у вас не заработает!Не потому что она не верна, а потому что "Нельзя объять необъятное".Сразу, потом можно, да и то частями.Сначало сделайте ваш файл test1.pl исполняемым. Для этого введитекоманду:    chmod +x test1.pl Затем проверьте где у вас Пел. Для этого введите:    which perl Система вам выдаст что то вроде: /usr/bin/perl Если: perl: Command not found. То тогда закройте книжку и ложитесь спать. У вас просто нет Пел илион не установлен. А мне остается послать вас к системному администраторуили к man (для переводчиков- man сокращение от manual а не то что вы подумали). Теперь проверьте что бы строка 01 содержала то что выдала команда which.Если совпало то введите:    test1.pl и бъсь на 50$ что и теперь программа не заработает, так как правильнейввести:    ./test1.pl Если я проиграл, то не радуйтесь. Да же если вам удалось запустить программукак test1.pl это значит, что у вас будут неприятности в будущем. Пример 2 Данная программа выводит на экран все ваши секреты. А именно файл /etc/passwd.    #!/usr/local/bin/perl   open(PASS, ")   {   print;   }   close(PASS); Пояснения: open(PASS, ")   Читать по одной строке файла в переменную по умолчанию $_. {   Открыть блок операторов. print;   Вывести на экран переменную по умолчанию $_ }   Конец блока. close(PASS);   Закрыть файл. Этого можно и не делать так-как файл автоматическизакроется после окончания программы. Результат работы этой программы тот же что и команды cat /etc/passwd.По экрану пробежали непонятные строки но зато теперь перед вамиоткрыты горизонты Пел программирования!Все последующие примеры будут развитием этой программы и онапревратится из гадкого утенка в прекрасного лебедя (не генерала). Пример 3 Разделенеие полей. #!/usr/local/bin/perl open(PASS, ")     {   ($login, $pass, $uid, $gid, $name, $home_dir, $shell) = split(':');   print "$login \t $name\n";     } close(PASS); Пояснение: ($login, $pass, $uid, $gid, $name, $home_dir, $shell) = split(':');   Присвоить указанным переменным поля входной строки, считая разделителем символ ':'. print "$login \t $name\n";   Вывести login - имя пользователя и его описание. Поля разделены символом '\t' - табуляции. Пример 4 Вывести имена пользователей отсортированных по группам.    #!/usr/local/bin/perl   open(PASS, "sort -n -t : +3 -4 +0 /etc/passwd|") || die "Файл не найден!";   while()   {   ($login, $pass, $uid, $gid, $name, $home_dir, $shell) = split(':');   print "$login \t $gid \t $name\n";   }   close(PASS); Поеснения: open(PASS, "sort -n -t : +3 -4 +0 /etc/passwd|") || die "Файл не найден!";   В данной строке весь фокус! Входным файлом для нашей программыстал выход команды sort которая и отсортирует входные данные. Форматированный вывод. Ну а теперь напечатаем на экране все наши данные в удобной форме. #!/usr/local/bin/perl open(PASS, "sort -n -t : +3 -4 +0 /etc/passwd|") || die "Файл не найден!";while() { ($login, $pass, $uid, $gid, $name, $home_dir, $shell) = split(':'); write(); # Форматированный ывод данных. }close(PASS);exit 0;   # Завершение программы ############ Описание формы вывода ################## format STDOUT = Пользователь: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<                          $name         ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<                           $name         ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<                           $name--------------------------------------------------------------------------------Login:@<<<<<<<< Uid:@<<< Gid:@<<< Home dir:@<<<<<<<<<<<<<<<<<<<<< $login,        $uid, $gid,     $home_dir-------------------------------------------------------------------------------- .  # Это последняя строка программы Фрагмент результата: Пользователь: Калужский ликеро-водочный завод. Лучшие водки и         настойки. Звонить только перед праздником Кострикову         Анатолию т. 2-23-06,,,--------------------------------------------------------------------------------Login:uucryst Uid:1055 Gid:66 Home dir:/var/spool/uucppublic/-------------------------------------------------------------------------------- Пользователь: Торговый Дом Дилен,,, --------------------------------------------------------------------------------Login:uudilen Uid:1075 Gid:66 Home dir:/var/spool/uucppublic-------------------------------------------------------------------------------- Если вам интересно узнать как работает эта программа, то перевернитестраницу и начините свое путешествие в мире Пел.Желаю удачи!

Запуск интерпретатора Перл

Синтаксис:    perl [ключи] файл аргументы Перед стартом Пел ищет скрипт (программу) в следующем порядке:    1. В командной строке если указан ключ '-e'    2. Содержимое файла указанного в командной строке. В первой   строке можно указывать #!/usr/bin/perl для "автоматического"   запуска скрипта.    3. Стандартный ввод/вывод если не указан файл или аргументы   содержащие имя файла. Для передачи аргументов скрипту из   стандартного потока имя файла в командной строке обозначается   символом '-'. В методах 1 и 2 Пел сканирует строки начиная с первой если неуказан ключ '-x', в противном случае началом программы считаетсястрока с символами '#!' в начале и содержащая слово 'perl'.Концом программы считается строка '__END__'.В строке с '#!' можно указывать и ключи. Например '#!/bin/perl -d'для отладки программ. После "обнаружения" скрипта Пел компилирует его целиком во внутреннеепредставление. Если обнаруживаются ошибки то выполнение прекращается.Если ошибок нет он выполняется. Если скрипт заканчивается безкоманд exit() или die() то по умолчанию выполняется команда exit(0)обозначающая нормальное завершение программы. Ключи: -OцифрыКод символа-разделителя записей. По умолчанию \0. -aВключает режим автоматического разделения (split) переменной $_в массив $F. Применяется с ключами -n и -p. -cВыполняется синтаксическая проверка скрипта и выход без запуска. -dЗапуск в режиме интерактивной отладки. -Dчисло или DсписокУстановить флаги отладки Пел. Например -d14 проследитькак Пел исполняет вашу программу.    1  p  Синтаксический разбор   2  s  Состояние стека   4  l  Состояние стека имен   8  t  Трассировка исполнения   16 o  Создание оператора узла   32 c  Строковое/числовое преобразование   64 p  Вывод команды препроцессора для -P   128 m  Распределение памяти   256 f  Обработка формата   512 r  Синтаксический разбор регулярных выражений   1024 x  Дамп синтаксического дерева   2048 u  Проверка защиты   4096 L  "Утечка" памяти   8192 H  Дамп хеша   16384 X  Распределение scratchpad   32768 D  Очистка -e командаВыполнение скрипта из одной строки указанного в командной строке. -F шаблонУказывает шаблон разделения в режиме работы с ключом -a -iрасширениеПрименяется для резервной копии файла обрабатываемого оператором '<>'.Оригинал хранится в файле с тем же именем что и исходный, но суказанным расширением. Пример:   perl -p -i.old -e "s/рядовой/ефрейтор/" file    - Поменять все слова "рядовой" на "ефрейтор" в файле file   а оригинал записать в файле file.old -IдиректорияДиректория includ- файлов для С препроцессора. Применяется с ключом -Pпо умолчанию это /usr/include и /usr/lib/perl. -lчислоАвтоматическая обработка символа конца строки. Работает в двух случаях.1. Отбрасывает последний символ читаемых строк для режимов -n и -p2. Присваивает указанное значение переменной $\. Таким образомк концу каждой строки выводимой оператором print добавляется этот символ. -nЗацикливает скрипт и последовательно обрабатывает файлы указанныев командной строке. Позволяет создавать команды подобные sed или awk.Операторы BEGIN и END дают возможность делать начальные и конечныеустановки. Содержимое файлов не выводится. -pТо же что и -n но печатает обрабатываемые строки файлов. -PПредварительная обработко препроцессором языка С. Будьте внимательныи не применяйте в комментариях слова 'if', 'else' или 'define'т.к. это команды С - препроцессора. -sВключение режима обработки ключей командной строки запуска скрипта.Все аргументы с символом '-' в начале, считаются ключом и переменнымс таким же именем присваивается значение true. -SИспользование системной переменной PATH для поиска скрипта.Данный ключ применяется в системах не воспринимающих последовательность"#!" в начале скрипта для указания интерпретатора. -TРежим проверки "дыр" в защите. Обычно это нужно для программработающих в режиме повышенной привелегии (setuid, setguid).Желательно для CGI скриптов. -uПринудительный дамп памяти после компиляции скрипта. Этот дампможно потом использовать для создания исполняемого файла спомощью программы undump. -UРазрешение выполнять опасные операции. Например стереть директориюили выполнять явно не закрытую программу. -vВывод номера версии Пел. -wВывод имен переменных используемых только один раз, имен скаляровиспользуемых до их определения, имен переопределяемых подпрограмм,ссылок на неопределенный указатели файлов, попыток записи в файлыоткрытых только на "чтение", употребление не коретных записей чисел,использование массивов как скаляров, рекурсия более 100 уровней. -x директорияРежим запуска скрипта вставленного в файл содержащийобычный текст. Началом скрипта считаестся строка с символами '#!'в начале и содержащия слово perl. Концом - строка с '__END__'Указанная директория становится текущей в момент исполнения.Если необходимо читать последующие строки то это лучше делатьчерез указатель файла DATA.

Синтаксис

Пел программа (скрипт) состоит из последовательности деклараций и предложений.Единственно что должно быть обязательно декларировано это форматы отчетови подпрограммы (функции). Все не объявленные переменные, массивы, имеютзначение 0 или null. Декларации (объявления). Пел имеет свободный формат. Комментарии начинаются с символа '#' ипродолжаются до конца строки.Декларации могут использоваться в любом месте программы так же как ипредложения (statements) но действуют они только в фазе компиляциипрограммы. Обычно их помещают или в начале или в конце программы.Декларация подпрограмм позволяет использовать имя подпрограммыкак списковый оператор начиная с момента декларирования. Пример:   sub test; # Декларация подпрограммы test    $var1 = test $0; # Использование как оператора списка. Декларации подпрограмм могут быть загружены из отдельного файлапредложением require или загружено и импортировано в текущуюобласть имен предложением use. Подробно см. главу Модули. Простое предложение. Простое предложение обязательнозаканчивается символом ';' если только это не последнее предложениев блоке где ';' можно опустить. Заметьте что существуют операторытакие как eval{} и do{} которые выглядят как сложные предложенияно на самом деле это термы и требуют обязательного указания концапредложения. Любое простое предложение может содержать single модификаторперед ';'. Существуют следующие single модификаторы:    if EXPR   unless EXPR   while EXPR   until EXPR где EXPR - выражение возвращающее логическое значение true или false.Модификаторы while и until вычисляются в начале предложения кроме блока do который выполняется первым. if EXPR   - Модификатор "если". Предложение выполняется если EXPR возвращает true. Пример:   $var = 1;   $var2 = 3 if $var > 0; # Результат: $var2 = 3 while EXPR - Модификатор "пока". Предложение выполняется столько раз пока EXPR = true Пример:   $var = 1;   print $var++ while $var < 5; # Печать $var с инкрементом Результат: 1234 until EXPR - Модификатор "до ". Предложение выполняется до тех пор пока EXPR = false Пример:   $var = 1;   print $var++ until $var > 5; # Печать $var с инкрементом Результат: 12345 unless EXPR - Модификатор "если не" . Обратный к if. Выражение выполняется есле EXPR = false. Пример:   $var = 1;   print $var++ unless $var > 5; # Печать $var с инкрементом Результат: 1 Сложные предложения. Последовательность простых предложений ограниченная функциональнымиограничителями называется блоком. В Пел это может бытьцелый файл, последовательность предложений в операторе eval{} иличаще всего это множество простых предложений ограниченных круглымискобками '{}'. Сужествуют следующие виды сложных предложений:    if (EXPR) BLOCK   if (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. Поэтому необходимовсегда использовать круглые скобки для обозначения блока. if (EXPR) BLOCK   - Вычисляется логическое выражение EXPR и если true блок выполняется. Пример:   $var =1;   if ($var == 1)   { print $var,"\n";   }Результат: 1 if (EXPR) BLOCK else BLOCK2 - Если EXPR=true выполняется BLOCK иначе BLOCK2. Пример:   $var =2;   if ($var == 1)   { print "\$var = 1\n";   }   else   { print "\$var не равно 1\n";   } Результат: $var не равно 1 if (EXPR1) BLOCK1 elsif (EXPR2) BLOCK2 ... else BLOCK -   Если EXPR1=true выполняется BLOCK1 иначе если EXPR2=true выполняется   BLOCK2 иначе ... иначе BLOCK. Пример:   $var = 1;   if ($var == 0)   { print "\$var = 0\n";   }   elsif ($var == 1)   { print "\$var = 1\n";   }   else   { print "Не известное \$var\n";   } Результат: $var = 1 Цикл while выполняет BLOCK до тех пор пока EXPR = true. Метка LABEL необязательна и состоит из идентификатора завершающегося символом ':'.Метка необходима при использовании внутри блока цикла управляющихоператоров next, last и redo. Если метка все же отсутсвует тоэти операторы ссылаются к началу ближайшего цикла.Блок после continue выполняется всегда перед тем как вычисляетсялогическое выражение EXPR. Это подобно EXPR3 в предлжении forпоэтому в этом блоке удобно изменять счетчики и флаги цикла дажеесли применяестя оператор next. Операторы управления циклом. next - подобен continue в С. Переходит к началу текущего цикла   т.е. повторяет итерацию. Пример:   M1:   while ($i < 6)   {   ++$i; # Увеличиваем счетчик на 1   next M1 if $i < 3; # Переходим в начало если $i < 3   ++$i; # иначе увеличиваем счетчик еще раз на 1   }   continue   {   print "$i "; # Печатаем $i   } Результат: 1 2 4 6 last - подобен оператору break в языке С. Немедленно прерывает цикл.   Блок continue пропускается. Пример:   M1:   while ($i < 6)       {       ++$i;  # Увеличиваем счетчик на 1       last M1 if $i > 3; # Выход из цикла если $i > 3       ++$i;  # иначе увеличиваем счетчик еще раз на 1       }continue {       print "$i "; # Печатаем $i} Результат: 2 4 redo - начать новый цикл не вычисляя EXPR и не выполняя continue блок. Пример:   M1:   while ($i < 6)       {       ++$i;  # Увеличиваем счетчик на 1       redo M1 if $i == 3; # Далее пропустить для $i = 3       ++$i;  # иначе увеличиваем счетчик еще раз на 1       }continue {       print "$i "; # Печатаем $i} Результат: 2 5 7 Цикл for.    LABEL for (EXPR1; EXPR2; EXPR3) BLOCKОператор for полностью аналогичен оператору for в С. В перед началомцикла выполняется EXPR1, если EXPR2 = true выполняется блок, затемвыполняется EXPR3. Пример:   for ($i = 2; $i < 5; ++$i)      {      print $i, " ";      }   print "\nПосле цикла i = $i\n"; Результат:   2 3 4   После цикла i = 5 Цикл foreach.    LABEL foreach VAR (LIST) BLOCK Переменной VAR присваивается поочередно каждый элемент списка LISTи выполняется блок. Если VAR опущенно то элементы присваиваютсявстроеной переменной $_. Если в теле блока изменять значение VARто это вызовет изменение и элементов списка т.к. VAR фактическиуказывает на текущий элемент списка.Вместо слова foreach можно писать просто for - это слова синонимы. Пример:   @месяц = ("январь","февраль","март"); # Создали массив   foreach $i (@месяц)       {       print $i," ";  # Печать $i       } Результат: январь февраль март Пример:   @месяц = ("январь","февраль","март"); # Создали массив   foreach $i (@месяц)       {       $i = uc($i); # Перевели в верхний регистр       }   print @месяц; Результат: ЯНВАРЬФЕВРАЛЬМАРТ Пример:    for $i (3,5,7)   {   print "$i ";   }Результат: 3 5 7 Блоки и оператор switch. Блок не зависимо от того имеет он метку или нет семантическипредставляет собой цикл который выполняется один раз. Поэтомудействие опраторов цикла next, last, redo - аналогично описанномувыше. Блоки удобны для построения switch (переключатель) структур.В пел нет специального оператора switch подобного языку С поэтомувы сами можете создавать удобные для вас конструкции. Опыт авторапоказывает что для простоты написания лучше всего подходитконструкция вида if ... elsif ... else ... хотя можно сочинитьи нечто подобное:    SWITCH:   {   if ($i ==1 ) { .....; last SWITCH; }   if ($i ==2 ) { .....; last SWITCH; }   if ($i ==3 ) { .....; last SWITCH; }   $default = 13;   } Выбирайте сами по своему вкусу. Оператор goto. В Пел существует оператор goto хотя где , как и когда его применятькак говорил Ходжа Насредин "Тонкий филосовский вопрос".Для начинающих программистов которым от так "нужен" я бы вообщепосоветовал "забыть" о его существовании. Однако при созданиибольших производственных задач на последнем этапе особеннопри отработке "отвальных" ошибочных ситуаций конечно goto нужен. В Пел реализовано три формы goto. goto - метка, goto - выражениеи goto - подпрограмма. goto - метка выполняет непосредственный переход на указанную метку. goto - выражение - Вычисляет имя метки и делает соответсвующий переход.   Например если мы хотим сделать переход на одну из трех меток   "M1:", "M2:" или "M3:" в зависимости от значений переменной   $i равной 0, 1 или 2 то это лучше сделать следующим образом:    goto ("M1", "M2", "M3")[$i];    здесь $i используется как индекс массива указанного непосредственно   в выражении. goto подпрограмма - довольно редкий случай т.к. всегда проще и надежнейвызвать подпрограмму "естественным" образом. POD операторы. Документирование программ. В Пел реализован очень удобный механизм для написания документациив момент создания программы. Для этого применяются специальные POD операторы.Если в теле программы интерпретатор встречает оператор начинающийсяс символа '=' например:    = head Набор стандартных процедур то пропускается все до слова '=cut'. Это удобно для включениядлинных на несколько строк или страниц комментариев. Затемс помощью специальной программы pod можно отделить текстдокументации от текста программы.

Переменные

В Пел существует три типа структур данных: скаляры, массивы скаляров ихеши (hashes) - ассоциативные массивы скаляров. Обычно элементы массивовиндексируются целыми числами, первый элемент - нулевой. Отрицательноезначение индекса обозначает номер позиции элемента с конца. Хеши индексируютсястроками символов. Имена скалярных переменных всегда начинаются с символа '$' даже когдаобозначают элемент массива. Пример:    $var1     # Простой скаляр 'var1'    @var1[0]  # Первый элемент массива 'var1'    $var1{'first'} # Элемент хэша с индексом 'first' В случае использования имени массива "целиком" или его "среза"перед именем массива ставится символ '@'. Пример:    @var1     # Все элементы массива var1 ( $var1[0], $var1[1], ... $var1[n])    @var1[1,3,10] # Элементы $var1[1], $var1[3], $var1[10]    @var1{'first','last'} # то же что и ( $var1{'first'}, $var1{'last'} ) Хеш "целиком" начинается с символа '%'. Пример:    %var, %key, %years Имена подпрограмм начинаются символом '&' если из контекста не видночто это подпрограмма. Пример:    &sub1, &test_prog, test(12) Имена таблиц символов всегда начинаются символом '*'. Каждый тип переменных имеет свою область памяти поэтому $var1 и $var1[0]совершенно разные переменные, хотя $var1[0] часть массива @var1. Так же\@var1 и %var1 - разные массивы переменных. Имена переменных могут содержать любые буквенно-цифровы символы за исключениемпробела и табуляции. Эти смволы используются в качестве разделителей.Большие и малые буквы различаются поэтому $var1 и $Var1 - разныепеременные. В Пел по умолчанию имена меток и указателей файлов пишутбольшими буквами. Контекст. Большое значение для правильного употребления встроенных функцийимеет контекст использования результата этих функций т.к. в противномслучае они возвращают совершенно "непонятный" результат.В Пел имеется два главных контекста: скалярный и список (list).Проще говоря если в левой части выражения имеется ввиду одно единственное значение - тоэто скалярный контекст. Если множество значений - список. Пример:    $var1 = <>; # Прочитать одну строку файла    @var1 = <>; # Прочитать все строки файла в массив @var1    $var1 = (1,2,3); # $var = 3 - количество элементов    @var1 = (1,2,3); # Создание массива @var1 с элементами 1,2,3 Скалярные значения. Все данные в Пел это скаляры, массивы скаляров и хеши скаляров.Скалярные переменные могут содержать числа, строки и ссылки.Преобразование числа - строки происходит автоматически по умолчанию.Скаляр может иметь только одно единственное значение, хотя этоможет быть ссылка на массив скаляров. Так -как Пел сам преобразовываетчисла в строки и наоборот то программисту нет необходимости думатьо том что возвращает функция. В Пел не существует типов "строка" или "число" или "файл" или что то еще.Это контекстно зависимый полиморфный язык для работы с текстами. Скаляр имеет логическое значение "TRUE" (истина) если это не нулеваястрока или число не равное 0. В Пел существует два типа нулевых (null) скаляров - определенные(defined) и не определенные (undefined). Не определенное значениевозвращается когда что-то не существует. Например не известнаяпеременная, конец файла или ошибка. С помощью функции defined()вы можете заранее обнаружить подобное состояние. Количество элементов массива так же является скаляром и начинаетсясимволами $# подобно интерпретатору csh. Фактически $#var1 - этоиндекс последнего элемента массива. Нужно помнить что первыйэлемент имеет индкес 0 поэтому количество элементов определяетсякак $#var1+1 . Присвоение значения $#var1 - изменит длинумассива и разрушит "оставленные" значения.Присвоение значения элементу массива с индексом больше чем $#var1- увеличит размер массива, а присвоение ему нулевого списка -обнулит. В скалярном контексте имя массива возвращает его длину (для спискавозвращается последний елемент). Пример:    @var1 = (4, 3, 2, 1); # Присвоение значения элементам массива   $i = @var1;       # Использование скалярного контекста   print $i;         # Печать результата 4 - кол-во элементов   print @var1;      # Списковый контекст, печать всех элементов. Для принудительного получения скалярного значения удобно применятьфункцию scalar(). Пример:    print scalar(@var1); # Вывод длины массива а не его значений Хеш в скалярном контексте возвращает "true" если существуетхотя бы одна пара "ключ-значение". Фактически возвращается строкатипа 2/8 где 8 - количество выделенных "ячеек" памяти а2 - количество использованных. Конструкторы скаляров. Числа пишутся стандартно:    123   123.123   0.12   .12E-10   0xABCD    # Шестнадцетиричная запись   0377      # Если 0 в начале - восьмеричная   123_456_123 # Так тоже можно для удобства чтения. Строки ограничиваются одинарными (') или двойными (") кавычками:    'Ровняйсь, смирно!'   "Построемся и спасемся." Способов обозначения строк очень много. Плодробно смотрите описаниеоператора qq. В хеше можно опускать кавычки если индекс не содержит пробелов. Пример:    $var1{first} то же что и $var1{'first'} Обратите внимание на то что перед первой одинарной кавычкой должен стоятьпробел иначе строка воспримется как имя переменной так-как в именахразрешено использование одинарных кавычек.Запрещается в кавычках применять зарезервированные литералы __LINE__(номер текущей строки программы), __FILE__ (текущий файл).Для обозначения конца программы можно применять литерал __END__Весь последующий текст игнорируется, но его можно прочитать используюуказатель файла DATA. Слова в программе не поддающиеся ни какой интепретации воспринимаютсякак строки в кавычках поэтому рекомендуется имена меток и указателей файловписать большими буквами для избежания возможного "конфликта" с зарезервированнымисловами. В Пел есть возможность вставлять текст документа прямо в программу.Так называемый "here-doc" (здесь текст) метод. Обозначается символами<< за которым идет слово-ограничитель. Пример:    print < . Пример:    %дни_месяца = (                  январь => 31,                  февраль => 30,   ); Тип typeglobs В Пел используется специальный внутренний тип typeglog для записимассива всех переменных. Такие массивы начинаются с символа '*'.Их удобно применять для передачи ссылок на массивы и хеши, нов данной версии Пел уже есть возможность применятьссылки поэтому это делается очень редко.Единственно где это необходимо так это для работы соссылками на файлы. Например если вам нужно создать локальнуюссылку на файл в процедуре то это лучше сделать так: sub new_sub{ local *IN; # Ссылка на файлopen (IN, "test") || return undef; # Открыть файл. Возврат при ошибке..........return;} Более подробно это описано в главе Ссылки.

Встроенные переменные Перл


Дата добавления: 2018-04-04; просмотров: 645; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!