|
1 Cтруктуры данных
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);
Левый аргумент определяет контекст правого аргумента.
2 Скалярные величины
Скалярные переменные могут содержать различные простые типы данных, такие как числа, строки или ссылки. Они не могут содержать сложные типы, но могут содержать ссылку на массив или хэш. В булевском контексте скаляр принимает значение 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 переход на следующую страницу
3 Простые массивы
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)= @_; Любой элемент массива может быть массивом.
4 Ассоциативные массивы
Ассоциативные массивы или хэши содержат пары ``ключ'' и ``значение''. Например: \%map = ('red',0x00f,'blue',0x0f0,'green',0xf00);
Часто для удобства чтения между ``ключом'' и ``значением'' ставят оператор =>. %map = (
'red' => 0x00f,
'blue' => 0x0f0,
'green' => )xf00
);
|