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

Начну с нуля и по порядку. Прежде всего любой скрипт должен начинаться верхней строчкой, указывающей адрес к Перлу. Например, так:
#!/usr/bin/perl или
#!/usr/local/bin/perl.

Если не уверен, спроси у администратора.

Также Перл-скрипт должен иметь
соответствующий суффикс. Обычно это .pl , но может быть и .cgi. Опять же осведомись у своего админа.

Теперь, пожалуй, самое главное - синтаксис Перла.

1) Любое действие должно заканчиваться точкой с запятой ";"

Пример:
$a=3+4;

2) После символа # и до конца строки следуют комментарии, то есть эту часть кода компилятор просто проигнорирует.

Пример:
# комментарий
$a=3+4; # tozhe kommentariy 🙂

3) Основные типы данных

Наиболее употребляемые типы данных

::Числа::

В Перле поддерживаются практически все форматы чисел, например:

целые -> 
13
80
-31337
вещественные ->
1.675
-6.55
числа с плавающей запятой ->
5.7e4 (то есть 5.7 умноженное на 10 в 4 степени)
-5.7e-5 (то есть 5.7 умноженное на 10 в минус 5 степени)

::Строки::

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

Примеры:

'Hello, Perec!'; # здесь всё понятно.
'Hello, \'Perec\''; # Тоже самое, только теперь "Perec" в одинарных кавычках
'Hello, \\Perec\\'; # Теперь "Perec" заключен между двумя обратными косыми.
'Hello, Perec
und Perechnici'; # Текст на двух строках

Строки между двойными кавычками.

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

Основные управляющие символы то "\n" - переход на новую строку и "\t" - табуляция.

Примеры:

"Hello, \nCoder" # слово Hello, переход на новую строку и слово Coder

$a=31337;
"Hello, $a Coder\n" # Hello, 31337 Coder и переход на новую строку.

Данные сами по себе это очень хорошо, но бесполезно. Их нельзя хранить или совершать над ними какие-либо операции. Надо бы нам их запомнить. Хоть я и рассматривал числа и строки отдельно, но, на самом деле, это, по сути, одно и тоже и для их хранения подходит один и тот же тип переменной - скалярная переменная. Для её объявления служит символ знак доллара "$". Имена переменных должны начинаться с буквы. Имя переменной ограничивается 255 символами. Отличаются большие и маленькие буквы. Для присваивания переменной значения служит знак равенства "=".

Примеры:
$a=5;
$a=$b=5 # присваивается переменным $a и $b число 5 
$Super_31337_variable='Pupkin';

Действия над числами:

$a=3+5; # сложение
$b=5-3; # вычитание
$c=$a+$b; # присвоение $c результата сложения $a и $b
$d=5*7; # умножение
$e=.5.6/7.7; # Деление 5.6 на 7.8
$g=6**3; # возведение 6 в степень 3
$cool++; # увеличивает значение $cool на 1
$sux--; # уменьшает значение $sux на 1

Операции логического сравнения для чисел

При сравнении двух чисел сравниваются их значения и возвращается значение "истина" (true) в случае правильности убеждения и "ложь"(false) в противном случае. Например, 2>1 даёт значение true, а 5>6 даёт false.

Виды операций сравнения:
< # меньше 
> # больше
<= # меньше или равно
>= # больше или равно
== # равно
!= # не равно

Действия над строками

Всего одно - конкатенация, то есть сложение строк. Обозначается одной точкой. 
Например:

$a = "Privet ";
$b = "Xakep!";
$c = $a . $b . "\n"; # $c присвоилось "Privet Xakep\n";

Операции логического сравнения для строк

lt # меньше 
gt # больше
le # меньше или равно
ge # больше или равно
eq # равно
ne # не равно

Сравниваются строки в порядке возрастания их ASCII значения.

Стоит отметить разницу между апострофами и кавычками, использующихся в присваивании. В кавычках осуществляется подстановка переменных и спец. символов, а в апострофах нет. Чтобы игнорировать подстановку в кавычках, следует перед спец. символом поставить слеш ( \ ). 
$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');
Операторы
Наконец, мы подошли к изучению операторов Perl. Набор операторов в нём огромен. Мы рассмотрим самые важные и простые.

Оператор 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=;
foreach(@data) {
chomp;
print if /^From:/;
}
аналогичен такому: 
@data=;
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";
}

Рассмотрим специальные символы, входящие в регулярные выражения: Конструкция Значение Пример использования 

Конструкция Значение Пример
использования
. Соответствует
любому символу
print if /ab.c/;
[множество
символов]
Соответствует
любому символу из данного множества
/[abc]d/; # Соответствует
 ad, bd и cd
[^множество
символов]
Отрицание
множества символов
/^[xyz]/; # Соответствует 
всему, что не 
содержит x, y или z
(...) Группировка
элементов с их запоминанием в
переменные $1, $2, $3 и т.д.
/(xyz)*//([abc].
[^xy]qwerty)/;
(...|...|...) Одна из
альтернатив
/(ftp|http|mailto)/;
* Повторение
образца 0 или более раз
/*./; # Соответствует
 всему
? Повторение 0
или 1 раз
none
+ Повторение 1
или более раз
none
{n,m} Повторение от n
до m раз
none
{n} Повторение
ровно n раз
none
{n.} Повторение n и
более раз
none
^ $ Соответствует
началу и концу строки
/^http/;
/\.cgi$/;
\t \r \n Управляющие
символы: табуляция, возврат каретки и
перевод строки соответственно
none
\d (/D) Соответствует
цифре или отрицает её, аналог
[0-9] ([^0-9])
none
\w (/W) Соответствует
букве или отрицает её
none
\s (/S) Соответствует
пробелу или отрицает его (включая
табуляцию и переход на новую строку)
none
\b (/B) Соответствует
границе слова или отрицает её
$test1="this is test";
$test2="wise";
if($test1=~/\bis\b/)
{ print "1"; }
# Соответствует
if($test2=~/\bis\b/)
{ print "0"; }
# Не соответствует
/\Bis\B/ #соответтсвует
'wise' но не 'is'
i Игнорирует
регистр
if($test=~/test/i) 
{ print "Not register"; } 
# Соответствует 
как test, так и TEST

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

Опция g осуществляет замену по всей строке (глобальная замена). Опция e используется для подстановки в выражение второй строки полностью. Рассмотрим пример замены: 
$x="This is test";
$x=~s/ /_/g;
print $x; # Выведет "This_is_test"

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии