Опубликован: 28.04.2014 | Уровень: для всех | Доступ: свободно
Лекция 5:

Язык Perl

< Лекция 4 || Лекция 5: 12 || Лекция 6 >

Презентация к лекции

Perl - высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию. Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language "практический язык для извлечения данных и составления отчётов "

Сейчас Perl содержится практически в каждом дистрибутиве Linux и других UNIX-систем, портирован на Windows и многие другие платформы. Администраторы со всего мира используют его для автоматизации своих повседневных задач.

Репозиторий CPAN содержит множество модулей для языка буквально на все случаи жизни.

Структура языка

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

#!/usr/bin/per

Эту строку желательно использовать как под Linux, так и под Windows (вдруг скрипт придётся на сервер заливать). Без данной строки программа не будет выполняться.

В структуру Perl'а входят: переменные, операторы, специальные символы. Все переменные начинаются с символа "$ " - как символьные так и числовые. Задаются переменные следующим образом:

$a=10; # Числовая переменная
$b= "simvol "; # Символьная переменная

Как численные, так и символьные переменные являются скалярными переменными. Рассмотрим действия, которые можно производить над скалярами:

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

Чтобы игнорировать подстановку в кавычках, следует перед спец. символом поставить слеш ( \ ).

$x= 'perem1 ';
print  'Var = $x '; или print  "Var = \$x "; # Выведет  'Var = $x ' print  "Var = $x "; # Выведет  'Var = perem1 '

Массивы

Массивы начинаются с символа @ и конструируются следующим образом:

  • @array1=(1,2,3,4,5);
  • @array2=(30,40,@array1); # Добавление к @array2 всех элементов @array1
  • @array3=($perem1,$perem2,$perem3);

Обращение к элементам массива осуществляется так:

  • @array1=(1..20);
  • @array1[2,10,20]=(20,3,4); # Замена элементов под номерами 2 10 и 20 числами 20 3 и 4
  • @array1[20,1]=@array1[1,20] # Меняет элементы местами

Обращаться к отдельному элементу массива (скаляру) можно в форме $имя_массива[индекс].

Для массивов существуют также такие функции как push(), pop(), shift(), unshift().

  • push(@array1,$perem1); # Добавляет $perem1 в конец @array
  • unshift(@array,$perem1); # Добавляет $perem1 в начало @array
  • $perem1=pop(@array1); # Присваивает $perem1 последнему элементу массива @array
  • $perem1=shift(@array); # Тоже самое с первым элементом

Хэши

Хэш - массив, состоящих из пар "Ключ-значение ". Доступ к каждому значению записи осуществляется по ассоциированному с ним ключу. Хэш выглядит так: %имя_хэша. Доступ к оттедльным его элементам: $имя_хэша{выражение}.

Кострукция хэша выглядит следующим образом:

  • $hash{1}= "key1 ";
  • $hash{ 'myset '}= "www.rambler.ru ";
  • $hash{1+2}=50;
  • %hash(1,20,2,100); # Чётное кол-во элементов обязательно!
  • # Запись аналогична $hash{1}=20; $hash{2}=100;

Удаление элементов из хэша производится с помощью операции delete:

  • delete($hash{1});

Выделить отдельные ключи и значения хэша можно при помощи функций keys() и values() соответственно:

  • %hash(1,20,2,100,3, 'test ');
  • @key=keys(%hash); # @key=(1,2,3);
  • @value=values(%hash) # @value=(20,100, 'test ');

Операторы

Оператор if имеет 2 формы:

  • if (условие)оператор;
  • оператор if условие;

В пару к if имеется оператор unless означающий if с отрицанием:

unless(($method eq  "GET ")||($method eq  "POST ")) { print  "Unknown method ";
}
print  "Ok " unless $y  > $x;

Также и с циклическим блоком while. Ему в пару существует оператор until означающий отрицание while. Например вместо:

while(!eof(FILE)) {
# Операторы ...
}

можно написать:

until(eof(FILE)) {
# Операторы ..
}

Синтаксис оператора for выглядит следующим образом:

for($i=0;$i <10;$i++) { # Выходим из цикла при $i <10 print $i; # Начальное значение $i=0
} # При каждой прокрутке цикла увеличиваем $i на 1

Следующий оператор foreach предназначен специально для массивов и предоставляет возможность пройтись по всем его элементам, поочерёдно присваивая каждый элемент каой-то переменной:

foreach $переменная (@массив) {
# Операторы
}
Или
foreach (@массив) {
# Операторы
}

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

@data= <STDIN >; foreach(@data) {
chomp;
print if /^From:/;
}

аналогичен такому:

 @data= <STDIN >; foreach $_ (@data) {
chomp ($_);
print $_ if $_=~/^From:/;
}

Регулярные выражения

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

Синтаксически регулярное выражение записывется между слэшами: /regular/.

Вот самый простой пример применения регулярных выражений:

 if (/abc/) {
print  "$_ содержит abc\n ";
}

А вот пример посложнее:

if (/(ftp|http):\/\/([^\/]+)(.*)/){ print  "Протокол: $1\n "; print  "Сервер: $2\n ";
print  "Документ: $3\n ";
}

С помощью регулярных выражений можно также производить замену одних символов другими. Синтаксис замены: s/выражение/строка/;.

Опция g осуществляет замену по всей строке (глобальная замена). Опция e используется для подстановки в выражение второй строки полностью. Рассмотрим пример замены:

$x= "This is test ";
$x=~s/ /_/g;
print $x; # Выведет  "This_is_test "

Функции split и join

Регулярные выражения можно использовать для разбивки строки на поля. Это делает функция split. Функция join выполняет противоположное действие - вновь "склеивает " эти кусочки.

< Лекция 4 || Лекция 5: 12 || Лекция 6 >
Алина Бёрнс
Алина Бёрнс
Ксения Птицына
Ксения Птицына

Когда можно будет пройти итоговую аттестацию 

Игорь Ананченко
Игорь Ананченко
Россия, Санкт-Петербург, Санкт-Петербургский государственный технологический институт (технический университет), 2015
Ангелина Димухамметова
Ангелина Димухамметова
Россия, Альметьевск