Вы наверное обратили свое внимание что
CGI скрипты пишутся обычно на языке Perl (Practical Extraction
and Report Language)- очень удобном языке,впитавшем из других все лучшие
черты.Может у вас возникнуть сомнение :Ну вот!Изучать новый язык
программирования!? Спешу вас успокоить,изучение Perl не будет в тягость
(я сужу по своему опыту!). Вы даже сами не заметите как выучите его.Если вы хоть
когда-нибудь программировали скажем на C и использовали утилиту
grep для поиска регулярных выражений в тексте,то вам будет еще легче.Мое
изучение Perl началось с того что я скачал Perl под Windows
(фирмы ActiveWare) и изучения
той HTMLой документации которая к нему прилагалась хватило чтоб этот язык
стал моим любимым.... Все в нем сделано для удобства программиста (в отличии
например от Java;( ) Начнем с переменных,они в Perl бывают 3х
типов скаларные,списковые(массивы) и хэши(ассоциативные
массивы). Для указания компилятору(да и для немалого удобства программиста)
перед именем скалярной переменной стоит знак '$' перед массивом
'@',перед хешем '%'. т.е. например
$scalar_var,@array_var,%hash_var Скалярные переменные могут быть как
числовые так и строковые,но это не надо указывать Perl сам по контексту в
зависимости от операций может привести одно к другому. Например:
"123"+"4" будет 127 (или "127") так как операция '+'
действует над числами а вот если применить операцию конкатенации строк
'.' то строковое "test" . 1 будет "test1" Ну а вот
операции над скалярными переменными:
Операции |
Описание |
Пример |
+ - * / % |
Арифметические |
print 2*7+4/(8%3); print int(127/15); #целая часть |
** |
Возведение в степень |
print 2**16; |
++ -- |
Инкремент-декремент |
$i++; |
& | ^ ~ << >> |
Побитовые |
$x=3;$y=4; print $x|$y; print $x&$y; |
== != < > <= >= <=> |
Числовые операции сравнения |
if($x==9){print "Ok!";} |
eq ne lt gt le ge cmp |
стрковые операции сравнения |
if($game eq 'doom'){print "You are doomer!\n";} |
|| && ! |
Логические |
if(($x==9)||($game eq 'doom')){print "hello you!\n";} |
?: |
Условный оператор |
$x=($game eq 'quake'?9:8); |
, |
Последовательное вычисление |
$x=10,$y=20; |
. |
Конкатенация |
$x='http://'.'www.uic.nnov.ru'; |
x |
Повторение |
$x='1234'x5; #$x='12341234123412341234' |
=~ |
Сопоставление с образцом |
if($url=~/http/){print "HTTP";} |
!~ |
То же но с отрицанием |
if($url!~/http/){print "No HTTP";} |
= += -= *= /= %= **= |= &= ^= ~= <<= >>= .= x= |
Присваивание |
$x+=$y; |
|
|
| Пусь это будет вам справочником ,да кстати насчет
строк,вы заметили,что они могут быть в двойных и одинарных кавычках, разница
между ними состоит в том ,что в одинарных не осуществляется подстановка
переменных, а в двойных осущестляется, Например: $x='qwerty'; print 'my var is $x'; #выведет my var is $x print "my var is $x"; #выведет my var is qwerty
Списки: Спискочные переменные начинаются с символа '@'
конструируются следующим образом @List1=(1,2,5,70); @List2=(12,23,@List1); #12,23,1,2,5,70 @Rgb=($r,$g,$b);
Также можно список использовать как lvalue: @List=(1,2,3..8,15); ($x,$y,$z)=@List; #$x=1,$y=2,$z=3 ($x,$y,$z,@list2)=@List; #$x=1,$y=2,$z=3,@list2=(4,5,6,7,8,15); ($r,$g,$b)=@Rgb;
Можно обращаться к нескольким,выбраным элементам массива(срезу
массива): @list=(1..10); @list[2,3,5,9]=(100,200,300,400); #@list=(1,100,200,4,300,6,7,8,400,10) @list[1,10]=@list[10,1];#меняет местами элементы
Обратится к скаларному значению -элементу массива можно
$имя_массива[индекс], сдесь обратите внимание на знак '$'- мы ведь
обращаемся к скаляру-элементу. Теперь немного о хешах: хеш это
такой массив который состоит из пар ключ-значение, весь хеш обозначается
%хеш ,к отдельным элементам доступ $хеш{скалярное выражение}
конструируется хеш так: $my_hash{1}="doom"; $my_hash{'quake'}="www.idsoftware.com"; $my_hash{1+2}=100;
Хеш может быть также сконструирован из массива с четным числом
элементов где пары превращаются в ключ-значение %hash=(1,20,2,100);#аналогично $hash{1}=20;$hash{2}=100;
удаление из хеша -операция delete: delete $hash{1};
есть функции выдающие ключи и значения соответственно. %hash=(1,20,2,100,3,'doom'); @k=keys %hash; #@k=(1,2,3); @v=values %hash;#@v=(20,100,'doom');
Операторы: Набор операторов в Perl Очень широк,многие из них
прямые аналоги имеющихся в других языках,например if,for,while;но есть и
значительные улучшения имеюшихся и конечно новые... Тот же самый оператор
if имеет две формы (как когда удобнее): if(условие)оператор; оператор if условие;
|