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"