в противном случае они возвращают совершенно «непонятный» результат. В Перл имеется два главных контекста: скалярный и список (
list). Проще говоря если в левой части выражения имеется ввиду одно единственное значение – то это скалярный контекст. Если множество значений – список. Пример: $var1 = <>; # Прочитать одну строку файла @var1 = <>; # Прочитать все строки файла в массив @var1 $var1 = (1,2,3); # $var = 3 – количество элементов @var1 = (1,2,3); # Создание массива @var1 с элементами 1,2,3
Скалярные значения. Все данные в Перл это скаляры, массивы скаляров и хеши скаляров. Скалярные переменные могут содержать числа, строки и ссылки. Преобразование числа – строки происходит автоматически по умолчанию. Скаляр может иметь только одно единственное значение, хотя это может быть ссылка на массив скаляров. Так – как Перл сам преобразовывает числа в строки и наоборот то программисту нет необходимости думать о том что возвращает функция. В Перл не существует типов «строка» или «число» или «файл» или что то еще. Это контекстно зависимый полиморфный язык для работы с текстами. Скаляр имеет логическое значение "
TRUE" (истина) если это не нулевая строка или число не равное 0. В Перл существует два типа нулевых (
null) скаляров – определенные (
defined) и не определенные (
undefined). Не определенное значение возвращается когда что-то не существует. Например не известная переменная, конец файла или ошибка. С помощью функции
defined()вы можете заранее обнаружить подобное состояние. Количество элементов массива так же является скаляром и начинается символами
$#подобно интерпретатору
csh. Фактически
$#var1– это индекс последнего элемента массива. Нужно помнить что первый элемент имеет индкес 0 поэтому количество элементов определяется как
$#var1+1. Присвоение значения
$#var1– изменит длину массива и разрушит «оставленные» значения. Присвоение значения элементу массива с индексом больше чем
$#var1 – увеличит размер массива, а присвоение ему нулевого списка – обнулит. В скалярном контексте имя массива возвращает его длину (для списка возвращается последний элемент). Пример: @var1 = (4, 3, 2, 1); # Присвоение значения элементам массива $i = @var1; # Использование скалярного контекста print $i; # Печать результата 4 – кол-во элементов print @var1; # Списковый контекст, печать всех элементов. Для принудительного получения скалярного значения удобно применять функцию
scalar(). Пример: print scalar(@var1); # Вывод длины массива а не его значений Хеш в скалярном контексте возвращает «true» если существует хотя бы одна пара «ключ-значение».
|