The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Perl" / Оглавление документа

Perl-программирование


[Пред] [1] [2] [3] [4] [5] [След]
  • Операторы

  • Наконец, мы подошли к изучению операторов Perl. Набор операторов в нём огромен. Мы рассмотрим самые важные и простые.

    Оператор if имеет 2 формы:
    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:/;
    }
    
  • Регулярные выражения

  • Пожалуй самым большим преимуществом языка Perl над другими является поддержка регулярных выражений.
    Синтаксически регулярное выражение записывется между слэшами: /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/выражение/строка/;

    Опция g осуществляет замену по всей строке (глобальная замена). Опция e используется для подстановки в выражение второй строки полностью. Рассмотрим пример замены:
    $x="This is test";
    $x=~s/ /_/g;
    print $x; # Выведет "This_is_test"
    

    [Пред] [1] [2] [3] [4] [5] [След]



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру