#!/usr/bin/perlЭту строку желательно использовать как под Linux, так и под Windows (вдруг скрипт придётся на сервер заливать). Без данной строки программа не будет выполняться.
$a=10; # Числовая переменная $b="simvol"; # Символьная переменнаяКак численные, так и символьные переменные являются скалярными переменными. Рассмотрим действия, которые можно производить над скалярами:
Операция | Описание | Примеры |
+ . / % | Арифметические действия | print 2*7+4/(8%3); print int(127/15); #Целая часть |
** | Возведение в степень | print 2**16; |
++ -- | Инкремент и декремент | $i++; # Увеличить переменную $i на 1 |
& | ^ ~ << >> | Побитовые операции | $x=3; $y=4; print $x|$y; print $x&$y; |
== != < > <= >= <=> | Числовые операции сравнения | if ($x==9) { print "Ok!"; } |
eq ne lt gt le ge cmp | Строковые операции сравнения | if ($test eq 'ok') { print "All right!"; } |
|| && ! | Логические операции | if (($test eq 'ok') || ($x==9) { print "All right!"; } |
, | Последовательное вычисление | $x=10,$y=20; |
. | Склеивание | $url='http://'.'rambler.ru'; |
x | Повторение | print '1234'x3; # Получится '123412341234' |
=~ !~ | Сопоставление с шаблоном | if ($url=~/http/) { print "HTTP"; } |
= =+ =- *= /= %= **= |= &= ^= ~= <<= >>= .= x= | Присваивание | $x+=$y; # Прибавит к переменной $x переменную $y |
$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(@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(условие)оператор; оператор 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:/; }
/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/выражение/строка/;
$x="This is test"; $x=~s/ /_/g; print $x; # Выведет "This_is_test"
open(переменная,"[способ открытия]путь к файлу");
. Под переменной впоследствии будет пониматься символьное обозначение файла. Для закрытие файла используем close(переменная).open(myfile,"myfile"); # Открыть файл для чтения open(myfile,">myfile); # Открыть файл для записи open(myfile,">+myfile); # Открыть файл для чтения и записи open(myfile,">>myfile); # открыть файл для дозаписиОткрыв файл, вы можете считать из него строку в переменную:
$str=<переменная>; # Где переменная соответствует переменной, обьявленой в open()или весь файл в массив:
@str=<переменная>;Избавиться от символа перехода на новую строку, поможет функция chomp($переменная).
print переменная "text";
Вот простой пример, который выводит содержимое файла на экран:
open(passwd,"/etc/passwd"); while ($read=<passwd>){ print "$read\n"; } close(passwd);Для удаления файла используется функция unlink("имя_файла"), для переименования: rename("имя_файла","новое_имя_файла");
if(-e "file") {print "Yes"; }-z - файл существует и имеет нулевую длину.
if(-z "tmp") { unlink("tmp"); }-d - файл является каталогом.
if(-d "myfile") { chdir("myfile"); }-s - размер файла в байтах.
unlink("file") if (-s "file" < 20);
@massiv=split(/:/,$str); # Разбивает строку по ":" print "$massiv[0]\n"; # Печатает первый элемент, стоящий перед ":" в строке $str=join(/;/,@massiv); # Склеивает все элементы массива по ";"Функция substr() позволяет выделить часть строки. Формат функции:
substr($строка,начальный номер элемента,конечный номер элемента); $str1=substr($str,0,7); # Присваивает $str1 первые 7 элементов $str;Функции lenght и scalar позволяют узнать количество символов в строке и количество элементов в массиве соответственно:
$count=lenght($str); # Возвращает кол-во символов в $str $arr=scalar(@array); # Возвращает кол-во элементов в массиве @array
http://www.perl.com | <-- главный сайт по Perl-программированию. |
http://www.cgi-resources.net | <-- бесплатные скрипты и документация. |
http://www.nas.pp.ru | <-- хороший сайт по Perl. |
Copyright Forb (2002)
Copyright Forb (2002)