Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование скриптов на Perl'e (выпуск №2)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Программирование скриптов на Perl'e (выпуск 2).

Добрый день (вечер, ночь, утро). Теперь, собственно говоря, мы и начнем непосредственно изучение Perl'a.

Мне встречалось два основных типа начала изучения любого языка программирования.   Можно начинать с написания программ типа "Hello, World" и затем, постепенно, в процессе их написания знакомиться с языком.   А можно наоборот начать с изучения самого языка, его типов, операторов, конструкций и т.д.   Мне, честно говоря, больше нравится второй подход, и поэтому я буду придерживаться его.

Perl, сам по себе, не типизированный язык.   В нем Вы не найдете таких привычных и знакомых из Паскаля и Си типов как "строка", "целое со знаком", "целое без знака", "число с плавающей точкой" и т. п.   В Perl'e существуют только три основных типа данных:

  • скаляр;
  • массив;
  • хэш (ассоциативный массив).

    В Perl'e любая переменная, начинающаяся со значка "$", является скалярной - $i, $var, $very_long_variable.

    Обязательно нужно помнить, что Perl чувствителен к регистру и переменные $var, $Var и $VAR - это РАЗНЫЕ переменные и при изменении одной из них модификации других не происходит.

    Скалярные переменные могут содержать числа, строки и ссылки.   Такая переменная может принимать только одно единственное значение, хотя это может быть и ссылка на массив скалярных переменных.   Все числа в скалярах содержатся в виде их строчной записи, но при выполнении над переменной арифметических действий автоматически преобразуются в числовую форму.

    Скалярная переменная имеет логическое значение "true" если это не нулевая строка и не число "0".   Существует два типа нулевых скаляров - определенные и не определенные.   Неопределенное значение возвращается, когда что-либо не существует.   Например: неизвестная переменная, конец файла и т. п.

    Присвоение значений скалярным переменным, я думаю, не вызывает трудностей.   Все приведенные ниже записи являются верными:

  • $i=0;
  • $float=3.14;
  • $float2=.41E-4;
  • $hex=0x32FF4A;         # Шестнадцатеричное значение
  • $octal=0127;                # Восьмеричное значение (в начале - 0)
  • $long=123_456_789;   # При этом $long=123456789
  • $str1='Так задается строка';
  • $str2="И так задается строка";

    Так же как и у скалярных переменных, у массивов в Perl'e есть свой "префикс" - любая переменная, начинающаяся со значка "@", является массивом - @records, @Names.

    Список очень интересно ведет себя в скалярном контексте.   Так если выполнить немыслимое, с точки зрения программиста на Паскале или Си, присвоение:
          $len=@array;
    т. е. по сути, присвоить переменной массив, ошибки не произойдет.   На самом же деле после такого присвоения в переменной $len будет число равное длине массива, т. е. количество его элементов (но не индекс последнего, т. к. в Perl'e нумерация начинается с нуля).

    Задавать значения списков можно по разному:

  • @array1=(1, 2, 3, 4);
  • $array2[0]=23;
        $array2[1]=56;
        $array2[2]=546;
        $array2[3]=213;
    Получаем массив: @array2=(23, 56, 546, 213).
  • @array3=(3, 'и так можно', 3.14);
  • ($a, $b, $c)=(1, 2, 3);
    Получаем $a=1, $b=2, $c=3.

    Можно включать списки в списки:
        @list1=(1, 2);
        @list2=(5, 6);
        @list=(@list1, 3, 4, @list2, 7);
    Результат: @list=(1, 2, 3, 4, 5, 6, 7);

    Присваивание списков в скалярном контексте возвращает количество присвоенных элементов:
        $res=(($a, $b, $c)=(1, 2));
    Результат: $res=2.

    Индекс последнего элемента массива можно определить следующим образом:
        @array=(..);       # Любое определение массива
        $end_array=$#array;

    Так же как и у скалярных переменных и массивов, у хэшей в Perl'e есть свой "префикс" - любая переменная, начинающаяся со значка "%", является хэшем - %hash, %monthes.

    Теперь о том, что же представляет собой хэш.   По сути дела хэш это тот же массив, но доступ, к элементам которого, осуществляется не по индексу элемента, а по имени поля.   Каждая запись в хэше представляет собой пару "ключ" - "значение".

    Например:
        %map=('red', 0xff00000, 'green', 0x00ff00, 'blue', 0x0000ff);

    Часто для удобства чтения между "ключом" и "значением" ставят оператор =>.
        %map=( 'red' => 0xff0000,
                      'green' => 0x00ff00,
                      'blue' => 0x0000ff
                    );

    Либо так:
        $map{'red'}=0xff0000;
        $map{'green'}=0x00ff00;
        $map{'blue'}=0x0000ff;

    Обращение к элементу хэша осуществляется следующим образом (как к обычному скаляру):
        $color=$map{'red'};

    Можно присвоить список хэшу:
        @list=(1, 31, 2, 28, 3, 31);       # кол-во дней в 1-3 месяцах
        %hash=@list;
    Результат:
        $hash{'1'}=31;
        $hash{'2'}=28;
        $hash{'3'}=31;


    Ну, вот вроде бы и все о типах в Perl'e.


    Желаю удачи. До новых встреч.


    Виталий Ярошевский vitalij@newmail.ru


    При подготовке данной рассылки были использованы следующие материалы:

    1. "Основы программирования на языке Перл"     Маслов В. В. - "Радио и связь" 1999
    2. "Спецификация языка Perl"     Алена Федосеева


    http://subscribe.ru/
    E-mail: ask@subscribe.ru

    В избранное