Новичку полезно

  • А знаете ли вы что?

    - rudvs - это вам не трусы в шубу заправлять!


[Perl][Показать все что скрыто] v 0.1

Теги: перл, perl, синтаксис, функция, массив, информация, программирование

Введение

Интерпретируемый язык программирования. Код не требует компиляции, поэтому программа хранится в открытом виде в файлах типа .pl, которая легко редактируется любым текстовым редактором (исключая редакторы с форматированием текста, такие как Word от MSOffice). Программа посылается интерпретатору и в последствии выполняется. Сам интерпретатор входит в бОльшую часть *nix дистрибутивов, если же пользуетесь неблагодарной и не понятной системой Windows, то стоит скачать ActivePerl. Проверить установлен ли в вашей системе perl можно следующим образом: откроем командную строку и введем:

$ perl -v

Эта команда выводит версию интерпретатора. Можно наверно догадаться что если он не установлен, то версии вы не увидите.
Так как некоторые мутные личности вообще не одупляют зачем эта штука нужна, то немного теории.
Первоначально язык был создан для работы с текстом, в последствии он мутировал и получился язык которому под силу решать самые разные задачи. Он хорошо работает с текстом, системные задачи и даже может заменить знаменитый php на сервере. Но самый его большой плюс - это регулярные выражения, так называемые шаблоны для поиска. Можно даже сказать что это язык в языке (о как!) состоящий из метасимволов, но об этом позже. Так же язык имеет огромное сообщество по всему миру. На сайте cpan.org можно скачать огромное количество полезных модулей для всемозможных задач.

Синтаксис

Синтаксис сука... странный. Вы можете написать работаспособную программу и через неделю смотря на код и почесывая голову не понять что он вообще делает. Оформление кода символично свободное, потому что у дяди который придумал этот язык есть лозунг - "Есть больше одного способа это сделать". Здесь разве что нельзя писать справо налево.
Перейдем к делу и попробуем написать hello world:
Открываем свой любимый редактор и пишем первую строчку:

#!/usr/bin/perl

С этой строчки начинаются все скрипты на perl, она указывает путь до интерпритатора. Если скрипт запускается в windows, то она просто игнорируется (потому что не надо ей знать такое), но принимает во внимание ключи которые можно поставить после этой строчки (об этом позже). Далее пишем саму команду которая выводит "Hello, world":

print "Hello, world!";

Здесь оператор print выводит прямо в консоль значение "Hello, world!". Замечу, что знак ";" крайне обязателен, он говорит интерпретатору что здесь кончается строчка. Уже на этом этапы вы можете убедиться в гибкости оформления программы. Можете написать следующим образом:

print
"Hello, world!"
;

Удивительно, но это рабочий скрипт. Сохраняем код в файле file.pl и открываем командную строку, переходим в папку с программой и набираем:

$ perl file.pl

Можно радоваться. Как и во всех аналогичных языках, вы можем пользоваться переменными (скалярами). Перед именем переменной просто полюбому надо ставить знак "$", так мы даем понять интерпретатору что это именно переменная. Например:

$str = "Hello, world!";
print $str;

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

$str = "Hello, ";
$str .= "world";
print $str;

То же самое и с числами. Обсалютно то же самое можно сделать и по-другому:

$a = "Hello, ";
$b = $a . "world";
print $b;

Здесь сначала выполняется правая сторона выражения ($a . "world"), и результат помещается в $b. Вот еще один интересный пример:

$a = 5;                        # В переменной $a число 5
$b = $a + 2;              # Работаем как с числом и в переменной $b окажется число 7
$c = $a . "string"; # Работаем как со строкой и в переменной $c окажется строка "5string"

Интерпретатор сам понимает когда надо работать как с число, а когда как со строкой. Это избавляет код от лишних телодвижений. Но как показывает практика, это не спасает от срача в коде.

Массив

Массив это список переменных в котором каждая переменная имеет индекс(порядковый номер). Индекс в массиве начинается с нуля. Перед именем массива нужно поставить символ "@". Запишем простой пример:

@m = (1,"2","string3");

Здесь в массив @m помещаются данные, причем это могут быть как число, так и строка. Вызываются элементы еще проще:

print $m[0],$m[1],$m[2];

При вызове элемента из массива используется знак "$", а не "@" как думается по логике. К слову сказать, элементы $m[0] и $m[1] аналогичны и не имеют принципиальной разницы. Кстати, немного о кавычках. Посмотрим пример:

$a = 5;
print "This is $a";      # Выведет "This is 5"
print 'This is $a'    # Выведет "This is $a"

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

print 'This is ' . $a;

Тут к слову "This is " мы дополняем преобразованную в число переменную $a. Этот способ для тех, кому не нравятся кавычки, но нужно работать с переменными. Если у вас вообще панических страх перед разными черточками - есть более экзатический вариант:

print qq?This is $a? # Выведет "This is 5"
print q?This is $a?;     # Выведет "This is $a"

Вместо "?" вы можете поставить любую пару спецсимволов. "qq" это аналог кавычек, а "q" апострафа. Удобно использовать если внутри выражения есть кавычки:

print "Дядя Вася - "петух" $a раз!";         # Ошибка в коде
print 'Дядя Вася - "петух" $a раз!'       # Не приобразуется переменная $a
print qq(Дядя Вася - "петух" $a раз!)   # Оптимальный вариант!

Функции

Функция - это кусок кода вызваный в любом месте который возвращает какие то данные. Этот кусок тоже может находится в любом месте. Оформляется функция так:

sub func{
    $a++;
    return $a;
}

Здесь мы объявили функцию func при вызове которой переменная $a увеличивается на единицу (аналог $a = $a + 1) и в качестве возвращаемого значения указали многострадальную переменную $a. Если в функции не указывается return, то возвращается результат последней операции в функции. Теперь вызовим эту функцию:

$a = 5;         # В $a помещается значение 5
&func;          # Вызывается функция &func по завершению которой в переменной $a уже будет значение 6
print $a;    # Печатаем результат манипуляций

Перед именем функции для ее вызова используют рагаль "&".


И на последок задачка:

Что выведет этот код и почему?

#!/usr/bin/perl

$a = 1;
print &func;

sub func{
    $dd = $a + 3;
    $bb = $a + 1;
}

Ответы пишите на форуме - http://rudvs.org.ru/forum/index.php?topic=42.0

Добавить комментарий


Обновить