Привет, %username%!
Итак, давайте напишем наш первый скрипт на Perl!
#!/usr/bin/perl $name = shift(); print("Hello, $name!\n"); Запускаем скрипт: $ chmod u+x 1.pl $ ./1.pl Username Hello, Username!
Прим.: или perl 1.pl Username в коммандной строке Windows Тут все очень просто: 1. Имена скалярных переменных (то есть не массивов и не хэшей, что это такое - см ниже) начинаются со знака доллара 2. Функция shift возвращает очередной аргумент скрипта. Другими словами первый вызов shift() возвращает первый аргумент, второй вызов - второй аргумент и так далее
Прим.: строго говоря, shift() забирает из последовательности первый элемент, а без аргументов используется системный массив @_, где храняться агрументы вызова функции 3. Функция print() выводит строку, переданную в качестве аргумента 4. В строку можно подставлять значения переменных (см строку 4). Подробнее о строках - см далее Если пока не очень понятно - ничего страшного. Возможно, немного теории внесет чуть больше ясности.
Типы переменных
В Perl существует три основных типа переменных: скаляры (числа и строки),массивы - подобно тем, что используются в Pascal или C (иногда массивы еще называют векторами), и хэши (ассоциативные массивы). Скаляры мы уже использовали в предыдущем примере. Вот еще несколько примеров задания скаляров.
#!/usr/bin/perl $a = 123; $b = -7.496; $c = 0xABC; # равно 2748, да, это комментарий :) $d = ($a + $b) / $c; $d *= $a; # тоже самое, что $d = $d * $a;
$str1 = "hello"; $str2 = "$str1, world"; # в $str2 записано 'hello, world' $str3 = $a."\n".$str2; $str4 = '$str1'; # в $str4 записано '$str1', а не 'hello' Тут мы задаем положительные и отрицательные, целые и дробные числа, задаем число в шестнадцатеричной кодировке, складываем, умножаем и делим - все как в си или java. Кроме перечисленных операций perl также поддерживает операцию возведения в степень:
$a = 2 ** 8; # результат: 256 Со строками все примерно так же, как в каком-нибудь PHP. Точка означает операцию конкатенации (то есть 'склеивания' строк), если в строке содержатся имена переменных, на их место подставляются значения, с помощью обратного слэша можно вставлять символы новой строки (\n), табуляции (\t), кавычки (\"), сам обратный слэш (\\) знак доллара безо всякой подстановки переменных (\$) и многое другое. Если строка в одинарных кавычках, символы в ней трактуются 'как есть', без подстановки переменных и тд.
Как и PHP, Perl интерпретирует скаляры, как числа или как строки в зависимости от контекста. Все просто:
$int1 = "11" + 22; # ^ числовой контекст, строка "11" преобразуется в число, # после чего выполняется сложение, результат: 33. $str1 = "11" . 22; # ^ строковый контекст, число 22 преобразуется в строку, # после чего выполняется конкатенация, результат: "1122". Правила преобразования из строки в число и наоборот тут те же, что и в PHP:
$str1 = 0 . "abc"; # ^ результат - "abc", число ноль преобразуется в пустую строку $int1 = "aaa" + 1; # ^ результат - 1, в строке "aaa" нет цифр $int2 = "12aaa" + 1; # ^ результат - 13, учитываются только первые цифры строки Кстати, для объявления длинных строк существуют специальные операторы - q и qq:
# аналогично одинарным кавычкам $text = q { Do you have $15 ? }; # аналогично двойным кавычкам $message = qq { Hello, $username! How are you? }; Работа с массивами происходит следующим образом:
#!/usr/bin/perl $scalar = "bebebebe"; ($a, $b) = (1, 2); # тоже самое, что $a = 1; $b = 2; @arr = ("aaa", 123, $scalar, $a+$b); print $arr[1]."\n"; push @arr, $a; print pop(@arr)."\n"; Здесь мы создаем массив @arr, состоящий из 4-х элементов (строка 5). Затем выводим второй элемент (строка 6). Нумерация элементов начинается с нуля, поэтому для вывода второго по счету элемента используется индекс 1. Затем кладем в конец массива значение переменной $a (функция push, строка 7), и тут же извлекаем и выводим его (функция pop, строка 8). Обратите внимание, имена массивов начинаются с 'собаки', а не доллара (запомнить не сложно - соответствующие символы похожи на первые буквы английских названий типов: $ - scalar, @ - array). При обращении ко второму элементу массива (строка 6) использовался знак доллара, потому что элемент массива является скаляром. По началу это вызывает много путаницы, но вообще все логично. Еще в этом скрипте мы вызываем функции print и push без скобок. В perl при вызове функции, везде, где это не вызывает неопределенности, скобки можно опустить. Для объявления массива, элементами которого являются строки без пробелов, существует специальный оператор - qw:
@arr = qw/aaa bbb ccc/; # аналогично ("aaa", "bbb", "ccc"), только короче Хэши похожи на массивы, но элементы в хэше не упорядочены. При этом в качестве ключа, по которому производится доступ к элементу, могут использоваться строки.
#!/usr/bin/perl %hash = ( # при объявлении хэшей и массивов можно "x" => 12, # использовать перенос строк y => 53, # если в ключе нет спец-символов, кавычки не нужны "z" => -10.5, # запятую на конце можно оставлять );
$hash{"x"}++; # координата по x теперь равна 13 $hash{y}--; # координата по y теперь равна 52
# выводим координаты print "x = $hash{x}, y = $hash{y}, z = $hash{z}\n"; Имена хэшей начинаются со знака процента, для обращения к элементу используются фигурные скобки (а не квадратные, как в случае с массивами). Если имя ключа заранее известно, можно указывать его без кавычек (строка 10). Кстати, переменные $test, @test и %test - это совершенно независимые друг от друга переменные разного типа.
Следующий урок
8 8 8
| |