Перейти к содержимому



Краткий курс: язык Perl

Perl

  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 admin

admin

    Администратор

  • Администраторы
  • 76 сообщений

Отправлено 03 Февраль 2014 - 22:45

1. Типы данных

Константы (литералы), строки, ссылки - все эти типы являются скалярами.

2. Операции над скалярами

+ ; - ; / ; % ; модуль ; степень ; сравнение ; eq ; ne ; lt ; gt ; le ; ge

Пример: if ($str21 eq $str22) ...

3. Служебные переменные

$_ - временный буффер
$| - отвечает за буфферизацию
$? - Код возврата последнего выполненного процесса

4. Массивы

При объявлении массива или при работе с массивом как с целым перед именем переменной массива ставится знак - "@".
Например: @massiv = (1,2,3);
Для того чтобы обратиться к элементу массива нужно только указать его индекс: print $massiv[2]
Можно работать одновременно с несколькими элементами массива: ($s1,$s2) = $massiv[0,1]; это называется - срез.
Чтобы узнать размерность массива нужно использовать функцию scalar(@имя_массива)

5. Время жизни переменных

В перле по умолчанию все переменные являются глобальными. Однако существуют способы задать локальные переменные. Например:
$tmp=10
sub func1 {
my $tmp;
$tmp=0;
print $tmp;
  sub func2 {
  print $tmp; }
}
Первый print выведет 0, а второй (который в функции func2) выведет 10
Это означает, что объявление переменной с помощью my делает ее доступной только в текущей функции!
Если же вместо my в этом кусочке программы поставить local, то переменная будет доступна еще и во вложенных функциях (т.е., в данном случае, и в функции func2)

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

   // - поиск
s/// - поиск и замена
tr/// - трансляция

Поиск используется, если вам нужно найти какую-то подстроку в заданой строке,
при этом исходная строка не меняется, а найденные подстроки помещаются
в переменные $1, $2, ....


Если мы хотим узнать, нет ли в строке $_ подстроки 'my', мы пишем: /my/;

Если мы имеем дело не с переменной по умолчанию, а с любой другой, пишем:
$str=~/my/;

Если мы хотим заменить в строке подстроку tree на root, используем поиск и
замену: $str=~s/tree/root/;

В конце выражения замены могут стоять опции e, g, i, m, o, s, x.

g - означает что заменяющая строка должна вычисляться как
Perl-выражение (например нам нужно заменить что-то на число,
которое еще нужно вычислить)
g - означает проводить замену не 1 раз, а по всей подстроке.
i - означает не учитывать регистр символов.

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

\w - в подстроке  обозначает любую цифру,
\w - множество алфавитно-цифровых символов,
включая символ подчеркивания.
\s - разделитель: пробел, символ табуляции \t, символ новой троки \n,
символ возврата каретки \r, символ подачи бланка \f.
\S - Не разделитель.
[...] - любой символ из [...], возможно задание диапазона, напр. [A-Z]
[^...] - любой символ не входящий в [...]
(...) - ряд элементов сгруппированных в один.
^ - означает положение в начале строки.
$ - означает положение в конце строки.
\b - положение на границе слова.
\B - положение не на границе слова.
\ - отмена специального значения следующего за ним символа.
например если вы хотите вывести символ \, то вам придется написать \\
. - любой одиночный символ, кроме символа новой строки.
+ - одно или более повторений предыдущего элемента.
* - нуль или более повторений предыдущего элемента.
? - нуль или одно повторение предыдущего элемента.

Примеры:

$str=~s/\s\d+\s/\s1\s/g;

означает "заменить все числа в строке $str, отделенные пробелами с двух
сторон, на цифру 1, отделенную пробелами".

$str=~/$ip/;
if ($1 ne $ip) { ... }  # это условие выполнится, если в строке $str не
# будет найдена подстрока $ip


7. Генератор случайных чисел.

Если вы хотите получить в своей программе случайное число, то вам нужно воспользоваться функцией rand
Функция rand возвращает вещественное число в диапазоне 0 - 1;
Если вы хотите получить число из другого диапазона, то нужно указать параметром верхнюю границу диапазона, например от 0 до 99 задается так: rand 100

Пример:

Получить целое число в диапазоне 0-1 (т.е. 0 или 1)

$rnd=int(rand 100);
$rnd=$rnd%2;


8. Получение параметров из формы.

Данный кусочек программы считывает параметры переданные одним из двух методов - либо POST либо GET.
Параметры помещаются в массив @Data и имеют такие же индексы как названия самих параметров
Например, если в форме было <input type=text name=action value=get> , то в скрипте вы можете получить значение параметра action следующим образом:

$str=$Data{action};

тепрь в строке $str в данном случае будет значение "get"

А вот и сам кусок программы:

$Method = $ENV{'REQUEST_METHOD'};
if ($Method eq 'GET') {
$Query = $ENV{'QUERY_STRING'};
}
else {
read(STDIN,$Query,$ENV{'CONTENT_LENGTH'});
}

foreach (split(/[&;]/, $Query)) {
s/\+/ /g;
($key, $value) = split('=', $_);
$key =~s/%(..)/pack("c",hex($1))/ge;
$value =~s/%(..)/pack("c",hex($1))/ge;
$Data{$key} = $value;
}




Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 скрытых пользователей

Рейтинг@Mail.ru