Интерполирование скаляров в строках
Интерполирование скаляров в строках
Это подстановка вместо имени переменной ее значения для строк в двойных кавычках
$a = “fred”;
$b = “text of $a”; $b = “text of fred”
$c = “text of $d”; $c = “text of”
т. к. $d не определена
Внимание!
Двойной подстановки нет.
$x = “$fred”;
$y = “hey $x”; $y = “hey $fred”
т. е. подставленный текст не просматривается.
Для предотвращения подстановки надо:
— либо поставить часть строки в одинарные кавычки;
— либо перед знаком $ поставить .
$a = “hi”;
$b = “a test of” . ‘$a’;
$c = “a test of $a”;
Будет:
$b = $c = “a test of $a”
Если в тексте есть $a и $aa, то будет подстановка для более длинного имени.
Чтобы сделать для короткого имени надо:
— заключить имя переменной в фигурные скобки {};
— завершить часть строки и начать другую часть строки знаком конкатенации.
Пример:
$a = “day”;
$aa = “Sunday”;
$b = “It’s $aa”;
$c = “It’s ${a}a”;
$d = “It’s $a”.”a”;
Получим:
$b = “It’s Sunday”
$c = “It’s daya”
$d = “It’s daya”
Ввод и вывод
Для ввода с клавиатуры применяется стандартный ввод <STDIN>, например:
$a = <STDIN>;
читаем текст
chomp($a);
избавляемся в нем от символа конец строки
Можно так:
Chomp($a = <STDIN>);
Для вывода функция print.
Print(“hellon”);
Print “hellon”;
Результат один и тот же:
Hello
Массивы и списки
Список – это упорядоченные скалярные данные.
Массив – переменная, которая содержит список.
! Отличие данного списка от списков в других языках состоит в том, что элемент массива – отдельная скалярная переменная.
Min массив – без элементов.
Max массив – заполняет всю память.
Имя переменной массива начинается со знака @.
@fred – массив
$fred – скаляр
Эти имена не пересекаются.
Списки задаются значениями, отделенными друг от друга запятыми и заключенными в круглые скобки:
(1,2,3)
(“fred”,1,2) т. е. типы элементов могут быть разными, как и в языке JavaScript:
(17,$a,$a+$b)
() – пустой список
(1..5) = (1,2,3,4,5)
(1.2..5.2) = (1.2,2.2,3.2,4.2,5.2)
Если
(1.3..5.1) то (1.3,2.3,3.3,4.3)
Чтобы не записывать
@a = (“fred”,”betty”,”lena”,”kolya”);
применяют функцию
gw:
— слова, заключенные в круглые скобки, должны быть разделены пробелами;
— функция заключает каждое слово в двойные кавычки.
@a = gw(fred betty lena kolya);
Список может быть аргументом функции print:
Print(“The answer “,”is”,$a,”n”);
Это 4-х элементный список.
Присваивание
@a = (1,2,3);
@b = @a;
Получили массив из 3-х элементов и скопировали его в @b
Массивы м. б. элементами
@a = gw(one two);
@b = (4,5,@a,6,7) @b = (4,5,”one”,”two”,6,7)
@b = (8,@a); # в начало списка добавляется 8.
@b = (@a,”last”); # в конец списка добавляется “last”.
Список из переменных м. б. использован в левой части оператора присваивания:
($a,$b,$c) = (1,2,3); $a=1, $b=2, $c=3
($a,$b) = ($b,$a) поменять местами $a и $b
($d,@fred) = ($a,$b,$c);
$d = $a
@fred = ($b,$c)
($e,@fred) = @fred;
$e = $b;
@fred = ($c)
Если в правой части оператора присваивания значений больше, чем в левой, то лишние значения отбрасываются.
Если в левой части переменных больше, чем в правой, то лишние получают значение undef.
Если в левой части переменная – скаляр, а в правой переменная массив, то присваиваемое число – это размер массива.
@fred = (1,2,3,4,5);
$a = @fred;
$a = 5.
Т. е. текущий размер массива.
Пример
$a = @fred;
$a) = @fred;
В чем различие?
В первом случае $a – это размер массива.
Во втором — $a – это первый элемент массива @fred.
Обращение к элементам списка
Элементы массива нумеруются:
— целыми числами;
— начиная с нуля;
— с шагом 1;
— элемент массива обозначается скалярной переменной с индексом в квадратных скобках
@fred = (1,2,3);
$b = $fred[0];
$b = 1;
$fred[0]=5;
@fred = (5,2,3)
Элементы массива могут участвовать в разных операциях
Срез – обращение к списку элементов одного массива. Для этого вводится специальное обозначение:
@fred[0,1]; º
$fred[0],$fred[1]
@fred[0,1] = @fred[1,0];
поменяли первые два элемента местами.
@fred[1,2] = (9,10);
замена последних 2-х элементов.
@who = (gw(fred betty lena lera))[2,3]
это как:
@x = gw(fred betty lena lera);
@who = @x[2,3];
@who = (“lena”,”lera”);
В качестве индекса может быть переменная:
$a = 2;
@fred = (7,8,9);
$b = $fred[$a];
$b = 9.
Это же самое можно сделать при помощи среза:
$b = (7,8,9)[$a];
В качестве индекса может быть массив.
@a = (7,8,9);
@b = (2,1,0);
@c = @a[@b];
@c = (9,8,7), т. е.
$a[2],$a[1],$a[0]
Присваивание значения элементу, который за пределами текущего массива расширяет его автоматически.
@a = (1,2,3);
$a[6] = “oh”;
@a = (1,2,3,undef, undef, undef,”oh”)
Для получения индекса последнего элемента массива применяют операцию $#:
@fred = (1,2,3,5);
$a = $#fred;
$a = 3;
Отрицательный индекс – это отсчет от последнего элемента массива
-1 – последний
-2 – предпоследний
Пример
@fred = (“lena”,”lera”,”eva”);
print $fred[-1];
выводит “eva”
print $#fred; 2
print $fred[$#fred]; “eva”
Функции push и pop
Добавляют и удаляют значение с правой стороны списка.
А. push(@list,$newvalue);
Теперь @list = (@list,$newvalue)
Б. $old = pop(@list);
— $old = $newvalue, то-есть в $old получили удаленный элемент;
— в @list последний элемент удален;
— размер @list уменьшился на 1.
Если в pop аргумент – пустой список, то она возвращает undef без всяких сообщений.
В push может быть список значений.
@list = (1,2,3);
push(@list,4,5,6);
@list = (1,2,3,4,5,6)
В функциях push и pop первый аргумент – это всегда переменная – массив.
Функции shift и unshift
Они делают аналогичную работу pop и push в левой части массива
unshift(@fred,$a);
@fred = ($a,@fred)
unshift(@fred,$a,$b);
@fred = ($a,$b,@fred)
$x = shift(@fred);
— $x = $fred[0];
— первый элемент удалился;