У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 20.2.2025

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

В этой статье я попытаюсь преподнести Вам, уважаемый читатель основы этого языка, в конце этой статьи я расскажу о том, как пользоваться PERL для программирования CGI. К CGI относятся такие общеизвестные программы, как web chat, гостевые книги, онлайн-магазины, а также программы для накрутки, показа рекламы, вытаскивании данных с чужих страниц (обо всем этом я поговорю в статье "Накрутки", которая где-то через неделю появится в номере)

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

Итак, вот первая программа на языке Perl, которую пишут на всех языках. 

print "Привет, Пользователь!\n";  

Естественно, что она печатает (print (англ.) - печатать) на стандартный вывод строку "Привет, пользователь!", после которой переведет курсор на новую строку. Хотя и не всегда под стандартным выводом стоит понимать монитор, если Вы ее запустите из-под командной строки Unix (Linux, Dos, Windows), то действительно стандартным выводом будет монитор, а если Вы запустите ее как CGI-скрипт, то стандартным выводом станет страница, которая создается этим скриптом (введенное понятие скрипт обозначает программу на интерпретируемом языке, в данном случае -- Perl).

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

Было упомянуто слово переменные, также их называют скалярами -- простейший вид данных, которым манипулирует Perl (определение Рэндала Л. Шварца -- автора книги "Programming Perl"). Скаляры в Perl представлены двумя типами данных -- строками и числами. Сначала рассмотрим числа.

Perl использует для хранения чисел формат данных double -- это обозначает, что ВСЕ числа в Perl хранятся, как дробные. Так, число 12 хранится в памяти Perl, как 12.00, чтобы записать восьмеричное число, нужно перед числом поставить 0 (нуль), перед шестнадцатеричным - 0x.

 0377 -- восьмеричное 377, ему соответствует десятичное 255
 0xFF -- шестнадцатеричное FF, то же десятичное 255

 Строки -- так же являются переменными, но заключенные в двойные кавычки (которые частью строки не являются), например "Hello!" есть строка длины 6 (не включая кавычки). Переменные в Perl начинаются со знака $, идущей за ним буквы и знаков: все символы латинского алфавита, цифры и знаки подчеркивания, примеры:

правильные имена: $a, $beta_312, $Alfa;
неправильные имена: $1_bom, $_34 (начинаются не с буквы).

  Итак, перепишем нашу начальную программу.

$hello="Привет, Пользователь!";
print $hello;

То есть, мы сначала присваиваем переменной $hello значение "Привет, Пользователь!", после этого мы выводим значение переменной $hello.

Очень интересной вещью является интерполяция строк (вставка значений переменных), то есть результатом работы программы: 

$a="Hello,";
$b="$a World";
print $b;

станет выведенная строка Hello, World!.

На массивах пока мы заострять внимание пользователя не будем, поэтому перейдем к работе с файлами в части 2

К файлу на диске в Perl принято обращаться по имени файловой переменной. Соответствие между файлом и файловой переменной (которая еще называется дескриптором) устанавливается операцией open, например:

open(FILE,"<test");

назначить переменной FILE (файловые переменные пишутся без вводного символа $) файл test, открытый для чтения (знак меньше ("<") перед названием файла обозначает открытие для чтения, знак больше (">") -- для записи, два больше (">>") для добавления). Чтобы прочитать строку из файла, нужно использовать операциюкосмического корабля (spaceship), которая пишется для данного случая так: <FILE>, где FILE -- файловая переменная, пример:

open(TEST1,"<test");
$a=<TEST1>;

в переменной $a будет значение первой строки файла test и еще символ новой строки. Чтобы убрать символ новой строки нужно использовать команду chomp($a); где $a -- переменная, у которой мы хотим убрать последний символ новой строки, то есть 

open(TEST1,"<test");
$a=<TEST1>;
chomp($a);
print $a;

не забудьте, что как я уже писал в статье "Введение в UNIX", CGI-скрипты будут выполняться пользователемnobody, так что файл test должен иметь атрибуты, открытого для чтения для пользователя nobody.

Операция закрытия файла пишется как close(FILE);.

И, наконец, последняя, но самая сложная в нашей статье программа.

$flag=0;
print "А как вас звали в прошлой жизни? "; 
$name=<STDIN>; 
chomp($name); 
print "Здравствуйте, $name!\n";
open(FILE,"<names");
while ($_=<FILE>) {
  chomp($_);
  if ($_ eq $name) { 
    $flag=1;
  }; 
  };
close(FILE);
if ($flag eq 1) {
  print "А я Вас помню\n";
} else {
  open(FILE,">>names");
  print FILE "$name\n";
  close(FILE);
}; 

но, как говорится, у страха глаза велики. Разберемся по порядку. $flag=0; -- знак присваивания(=) -- присвоить переменной слева значение того, что стоит справа. Значит присвоить переменной $flag значение 0. Пока большего знать не надо. Далее: написать строку; а вот дальше знак космического корабля и непонятная файловая переменнаяSTDIN, на самом деле обозначающая стандартный ввод. То есть просто произойдет чтение с клавиатуры (также как и print, при условии запуска из командной строки UNIX). Далее open открывает файл names для чтения -- помните знак ("<")? Дальше идет ключевое слово while, котороеозначает -- делать пока условие не нулевое. Условие -- это то, что записано в скобочках после слова while. 

Неискушенный программист подумает что условие это то, что переменная $_ равна ли значению выражения <FILE> (то есть очередной строки файла соответствующему дескриптору FILE), а человек, программировавший на C/C++ сразу поймет, где тут собака зарыта. 

На самом деле, это даже не совсем условие -- это оператор присваивания, да-да, ни что иное, как этот самый оператор(=). А операторы сравнения мы 
рассмотрим позднее. Теперь попробуем понять, что же представляет из себя это условие. 

Разберем просто оператор ($_=<STDIN>. Присвоить значение переменной по-умолчанию (переменная $_ называется переменной по-умолчанию) значение ввода (помните операцию космический корабль (<>)) с потока данных -- в данном случае этим потоком является файл, описанный дескриптором FILE -- то есть файл с названием names (смотри выше -- операция open). А с помощью космического корабля вы читаете каждый раз строку до символа (\n) новой строки. Значит прочитать очередную строку из файла names и занести ее в переменную $_. Далее, напомню, что прочитанная строка будет заканчиваться символом \n, значит даже пустая строка прочитанная из файла не будет нулевой длины. 

Это условие натолкнуло меня на мысль:

А если в файле 5 строчек (пустых), последняя из которых не заканчивается знаком новой строки - прочитает ли ее Perl? Я написал программу и проверил ее. И действительно, как я и думал, программа насчитала только 4 строки. А, т.к. последняя строка была пустой и в конце не было символа \n, то Perl действительно счел ее пустой, и не посчитал нужным выполнять условие while далее.

Значит while будет назначать переменной $_ очередную строку из файла (включая символ \n), пока та не станет равной "" то есть пустой строке (в данном случае кавычки показаны как ограничители строки.

Техническое отступление: мы говорим с вами о символе \n, и меня натолкнуло на мысль, что уважаемые читатели, по моей вине могу подумать, что и в памяти строки хранятся как строка\n, хотя на самом деле это не так, позвольте проиллюстрировать. 

Строка Разработчик - лучший журнал\n будет храниться в памяти как 
|208| 224| 231| 240| 224| 225| 238| 242| 247| ...| 237| 224| 235| 10|,  
где все эти цифры -- ASCII-коды соответствующих им символов, а 10 -- ASCII код знака смены строки. Таким образом знак новой строки, записывающийся
как \n, на самом деле только 1 символ, но ввиду того, что он непечатный символ -- его заменили на 2 символа '\' и 'n'. 

Но, вернемся к программе -- мы все еще пытаемся понять строку while ($_=<FILE>) {. То есть читать строку в $_ из файла с дескриптором FILE до тех пор пока строка не станет нулевой (пустой). А строка тогда станет нулевой, когда программа не сможет прочитать ничего из файла -- конец файла или пока не прочитает строку, которая будет пустой и не будет оканчиваться символом новой строки \n (см. выше) . Но что же это за издевальство -- где точка с запятой? Вместо нее здесь стоит открывающая фигурная скобка. Что же она обозначает? 

А означает она блоковую операцию, чтобы делать в цикле while (пока условие верно) несколько операций вы должны заключить их в фигурные скобки. 

В данном случае мы в цикле читаем имена из файла names, удаляем \n в конце (chomp) и если(if) это прочитанное имя равно имени, которое пользователь ввел, то флаговая переменная ($flag) устанавливается в 1. Дальше мы закрываем файл (close), если флаговая переменная равна 1, то пишем "А я Вас помню", в противном случае (else)  открываем файл names для добавления (">>") и записываем туда очередное имя. 

А если перевести это на человеческий язык, то программа будет запоминать все имена.
К сожалению, у меня не хватило места написать о CGI - программировании, но обещаю, что это будет статьей через пару дней, так как следующая по плану статья - Введение в HTML.   Поздравляем, вы только что прошли crash курс по языку perl.

Массивы в PERL

В статье "Введение в PERL" мы не коснулись темы массивов. Сначала рассмотрим понятие списка. Список -- это упорядоченный набор скаляров. Массив -- переменная, содержащая список. К массивам применимо понятие элемента. Каждый элемент массива содержит некое скалярное значение, независящее от других элементов. Значения в списке упорядоченные, то есть, например расположены по возрастанию от младшего к старшему. Значения элементов массива не обязательно упорядоченные.

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

Списочные литералы.

Списочный литерал -- способ представления массивов в программе. Записывается он как несколько значений скаляров через запятую, ограниченных круглыми скобками. Значения этих скаляров и есть элементы списка.
   
(3, 4, 5)   # Массив из трех элементов - 3, 4 и 5
  ("Николай", 23, 4.5, 4) # Массив из четырех элементов - "Николай", 23, 4.5 и 4

Как Вы видите, совсем не обязательно, чтобы элементы массива были одинакового типа. На самом деле в Perl понятие типа не совсем применимо, хотя и имеет место. Вы, например, можете сделать переменную $temp, присвоить ей значение 3 ($temp="3"), затем прибавить конкатенацией (соединением строк) к ней цифру 9($temp=$temp."9") и затем разделить на 3($temp=$temp/13) и получить 13.

Элементы массива не обязательно статичны, они могут вычисляться во время определения массива:
($a, 5, $b+$a)   # Массив из трех элементов: значение переменной $a, 5 и значение суммы $b+$a.

  Пустой массив задается так:
()

В Perl также есть операция конструктора списка, которая создает массив элементов от левого значения до правого с шагом 1, например:
(1 .. 5) # Массив из пяти элементов : 1, 2, 3, 4, 5
(1 .. 3.2, 5) # Массив из четырех элементов: 1, 2, 3, 5
($a .. $b) # Массив значений из ($b-$a) (округленное в меньшую сторону) элементов от значения $a до $b

Имена массивов задаются так же, как и просто скалярных переменных за одним исключением- символ @, буква, и нуль или больше символов, пример:
@test, @b1, @Te_23

  Списочный литерал может быть использован для операции print, например:
print("Число 12345 можно записать так: ", 1..5, "\n"); # Будет выведено Число 12345 можно записать так: 12345 и символ новой строки.

Начнем с начала -- с присваивания:
@test=(1,2,3); # Присвоить массиву test значение из трех элементов
@test2=@test1; # Присвоить массиву @test2 все значения массива @test (скопировать)
@test3=5; # Массив из одного элемента

Обращение к элементам массива происходит так:
@test1=(1,2,3);
print $test[0]; # Напечатать первый элемент, так как в Perl нумерация элементов происходит с 0.

С элементами можно делать те же операции, что и со скалярами.
$test[0]=$test[0]+1; # Прибавить 1 к первому элементу массива @test.

Так же имеет смысл обращение к элементам массива в списочном контексте.
@test[1,2]=@test[2,1]; # Поменять местами элементы второй с третьим
@test=@test1[0,1]; Назначить массиву @test значения первых двух элементов массива @test1

 Функции push и pop

Эти операции используются для добавления и вытаскивания элементов из списка. PUSH заталкивает значения в конец массива, POP вытаскивает последнее значение массива, удаляя его:
@test=(); # @test - пустой массив
push(@test,1); # @test теперь содержит (1)
$test1=pop(@test); # @test теперь снова пустой, а $test1 содержит 1.

Функция push может заталкивать и несколько значений и даже массивы:
push(@test,@test1); # Добавить в конец @test все значения массива @test1

   Есть 2 аналогичные функции - shift и unshift, но они соответственно вытаскивают и заталкивают значения, но в начале массива:
unshift(@test,1); # Добавить 1 в начало массива @test
$a=shift(@test); # Взять первое значение массива @test поместить в $a, удалить первое значение массива и сдвинуть все остальные значения к началу.

  Функции reverse и sort.

Эти функции предназначены соответственно для преобразования массивов. Reverse переворачивает массив, а sort -- сортирует массив:
@test=(3,1,2,1);  # @test содержит 3, 1, 2 и 1
@test=reverse(@test); # @test содержит 1, 2, 1 и 3
@test=sort(@test); # @test содержит 1, 1, 2 и 3




1. . Инструменты биржевой торговли 3 1
2. РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТОРГОВОЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра Финансы и кредит
3. Тема- ldquo;Анализ финансового состояния фирмыrdquo; Выполнил- студент курса ИНиМЭ групп
4. реферату- Welcome to the world of tlesРозділ- Журналістика Welcome to the world of tles ВСТУП Про навчальну функцію гри відомо вже
5. х годов многие организации стали разрабатывать и внедрять новые более гибкие по сравнению с бюрократией тип
6. КОНТРОЛЬНАЯ РАБОТА ПО ЛОГИКЕ 3 группа Ласковый Александр Васильевич
7. Выставка шагаем сами
8. Безопасность жизнедеятельности и Производственная санитария и гигиена труда Под редакцией
9. Реферат Поляризация света
10. Тема делиться надо