Учебное пособие по CGI-программированию - Операторы
ОГЛАВЛЕНИЕ
Операторы
Набор операторов в Perl Очень широк,многие из них прямые аналоги имеющихся в других языках,например if,for,while;но есть и значительные улучшения имеющихся и конечно новые...
Тот же самый оператор if имеет две формы (как когда удобнее): if(условие)оператор;
В пару к оператору if имеется оператор unless : означающий if с отрицанием:
оператор if условие;unless(($method eq 'GET')||($method eq 'POST')){print "Unsupported method";}
Также в пару while существует until
print "Ok" unless $x < $y;
синтаксис оператора for полностью аналогичен C: for($i=0;$i<10;$i++){
новшеством(и приятным) является foreach позволяющий пройтись по всем элементам массива,присваивая по очереди его элементы какой-то переменной, его синтаксис такой:
print $i;
}
foreach $переменная (@массив){
Последний пример особенно важен для упрощения вашего тяжкого труда програмиста и демонстрирует интересную особенность Perl-переменную по умолчанию $_: в огромном количестве операторов и функций при опускании аргумента она подразумевается по умолчанию. Она также по умолчанию сопоставляется с регулярным выражением:
блок операторов;
}
или
foreach (@массив){
операторы;
}следующий пример
как видите затраты труда значительно сокращаются,благодаря этому маленькому трюку.
@Data=<STDIN>;
foreach(@Data){
chomp;
print if /^From:/;
}
аналогичен такому:
@Data=<STDIN>;
foreach $_ (@Data){
chomp($_);
print $_ if $_ =~ /^From:/;
Регулярные выражения.
регулярное выражение записывается между двух слэшей /рег_выр/ if(/abc/){
это самый простой пример применения регулярного выражения а теперь посложнее вот тут в табличке (из того что я помню наизусть):
print '$_ содержит abc\n';
}
Символ | Значение | Пример применения |
. | Соответствует любому символу | print if /ab.c/; |
[мн-во симв] | Соответствует любому символу из данного мн-ва | /[abc]d/;#соответствует ad,bd,cd |
[^мн-во] | Отрицание мн-ва символов | /[^xyz]/;# |
(....) | Группировка элементов(и также запоминание в переменных $1 $2 $3 ...) | /(xyz)*/ /([abc].[^xy]qwerty)/ |
(..|..|..) | Одна из альтернатив | |
* | повторение образца 0 или более раз | /.*/;#соответствует всему |
? | Повторение 0 или 1 раз | /(http:\/\/)?.*\.cgi/ |
+ | Повторение 1 или более раз | |
{n,m} | повторение от n до m раз | |
{n} | повторение точно n раз | |
{n,} | повторение n и более раз | |
Спец символы: | ||
\t \r \n ... | Управляющие символы:табуляции,возврат каретки,перевод строки..... | |
\d | Соответствует цифре,Аналог [0-9] | |
\D | Соответствует нецифровому симсволу,аналог[^0-9] | |
\w | Соответствует букве | |
\W | Соответствует небуквеному символу | |
\s | Соответствует пробельным символам(пробелы,табуляции,новые строки..) | |
\S | Соответствует непробельному символу | |
\b | Соответствует границе слова | $test1="this is test"; $test2="wise"; if($test1=~/\bis\b/){print "1";}#соответствует if($test2=~/\bis\b/){print "2";}#нет |
\B | Соответствует не границе слова | /\Bis\B/ соответсвует 'wise' но не 'is' |
Для того чтоб поместить в регулярное выражение любой специальный символ,поставьте реред ним обратный слэш Заставить Perl игнорировать регистр можно поставив i после регулярного выражения print "Are you sure?:";
$answer=<STDIN>;
if($answer=~/Y/i){
#че-нибудь сделаем...