#!/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)