Perl поддерживает три типа данных: Обычные массивы, как и в языке C, индексируются числами, начиная с нуля. Ассоциативные массивы индексируются строками. Простые скаляры (в дальнейшем мы будем также называть их переменными) всегда начинаются со знака доллара: $, даже в том случае, когда мы обращаемся к элементу массива.
$day простая переменная day $day[28] 29 элемент массива day $day{"Feb"} значение "Feb" из хэша %day $#day последний индекс массива @day
Простой массив начинается со знака @:
@day массив day - ($day[1],$day[2],...) @day[3,4,5] то же, что и @day[3..5]
Ассоциативный массив (хэш) начинается со знака процент %:
%day (key1, val1, key2, val2, ...)
Каждый тип данных имеет свое именное пространство, поэтому вы можете использовать одно и то же имя одновременно для скалярной переменной, массива или хэша (а также для подпрограммы или метки) без опасения, что произойдет ошибка. Perl различает большие и маленькие буквы: FOO, foo и Foo будут рассматриваться Perl-ом как разные переменные. Имена, начинающиеся с буквы или знака подчеркивания, могут в дальнейшем содержать в себе цифры или знаки подчеркивания. Имена, начинающиеся с цифры, могут в дальнейшем содержать только цифры. Имена, начинающиеся не с буквы, цифры или подчерка должны состоять только из одного символа. Большинство таких имен зарезервировано, например $$ является идентификатором текущего процесса. Интерпретация команды или величины часто зависит от требований контекста. Существует два основных контекста: скалярный и списковый. Некоторые операции возвращают список величин если в контексте подразумевается список и одну величину, если контекст скалярный. Например, операция &ora_fetch в скалярном контексте возвращает количество выбранных строк:
$nfields = &ora_fetch($csr);
В списковом контексте она возвращает массив выбранных строк:
@array = &ora_fetch($csr);
Левый аргумент определяет контекст правого аргумента.
Скалярные величины
Скалярные переменные могут содержать различные простые типы данных, такие как числа, строки или ссылки. Они не могут содержать сложные типы, но могут содержать ссылку на массив или хэш. В булевском контексте скаляр принимает значение TRUE, если он содержит не нулевое число или не пустую строку. В Perl существует несколько способов записи чисел:
12345 12345.67 .23E-10 0xffff шестнадцатеричная запись 0377 восьмеричная запись. 1_234_567_890 подчерк для удобства чтения.
Строки заключаются в одинарные или двойные кавычки. Использование кавычек в Perl такое же как в bourne shell-е: строка в двойных кавычках обрабатывается и вместо переменных подставляются их значения, а также обрабатываются бакслэш-последовательности, строки в одинарных кавычках рассматривается просто как последовательности символов. Используются также:
\t | табуляция | \n | перевод строки | \r | возврат каретки | \b | пробел | \e | символ Escape | \033 | восьмеричный формат | \x1b | шестнадцатеричный формат | \c[ | управляющая последовательность (control) | \a | сигнал (alarm) | \f | переход на следующую страницу |
Простые массивы
Perl позволяет произвольно удлинять массив путем обращения к элементу, индекс которого больше, чем последний индекс массива. Так же можно произвольно уменьшить длину массива.
@day = ("a","b"); $day[3] = "c";
Теперь массив day содержит три элемента: ("a","b","c").
@day = (); или, что то же самое: $#day = -1;
Теперь массив day пуст.
(@day, @month, &SomeSub) содержит в себе элементы массива day, за ними следуют элементы массива month, а за ними результат выполнения подпрограммы SomeSub. Пустой массив обозначается (). Массив ((),(),(),()) эквивалентен пустому массиву. Последний элемент массива может быть массивом или хэшэм:
($a, $b, @c)= split; ($a, $b, %c)= @_;
Любой элемент массива может быть массивом.
Ассоциативные массивы
Ассоциативные массивы или хэши содержат пары ``ключ"" и ``значение"". Например:
\%map = ("red",0x00f,"blue",0x0f0,"green",0xf00);
Часто для удобства чтения между ``ключом"" и ``значением"" ставят оператор =>.
%map = ("red" => 0x00f, "blue" => 0x0f0, "green" => )xf00 );
8 8 8
| |