Будь умным!


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

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

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

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

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

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

от 25%

Подписываем

договор

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

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

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. Целобластула образуется при полном равномерном дроблении из яйцеклеток гомолецитального типа ланцетник
2. Физическая культура как компонент здорового образа жизн
3. Методические рекомендации по написанию рефератов Написание рефератов является одной из форм самостоятель
4. Задание- Помочь детям развивать в себе привычку к здоровому и творческому образу жизни; Выработать умен
5. Реферат з мовознавства Культура мовленняrdquo; ВСТУП Сучасне суспільство не може існувати без мови ~ на
6. горячих денег последствия которого хотя и скажутся на внешней торговле и производстве не приведут к масшт
7. Общая Медицина
8. женщина общественнополитическое движение целью которого является предоставление женщинам всей полнот
9. Лінійні електричні кола в ТЗІ
10. Лекция 5 и 6 Неклассическая и постнеклассическая философия
11. Электропитающие системы и электрические сети для студентов специальности 140211 ~ Электроснабжение 1
12. а предпринимательство государственное; б предпринимательство частное
13. Редуктор коническо-цилиндрически
14. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ПОДГОТОВКЕ И НАПИСАНИЮ КУРСОВОЙ РАБОТЫ
15. Девясил высокий
16. 25 млн лет 3 В каком регионе планеты в 1927 г
17. Тема 1. Отношение мирчеловек как проблема философии
18. Варианты ответа- 1 2 3 4 п1
19. ТЕМА 55. ПРОМЫШЛЕННЫЙ ПЕРЕВОРОТ ПЛАН Введение 1
20. Чернобыльская авария (Доклад)