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"