Блоки операторов.
{ 1_operator; 2_operator; 3_operator; ... last_operator; # with or witout ";" }
Оператор do {} while/until.
do { op_1; op_2; op_3; } while выражение;
Пример:
$stops = 0; do { $stops++; print "Next stop? "; chomp($location = <STDIN>); } until $stops > 5 $location eq 'home';
Оператор foreach.
Этот оператор получает список значений и присваивает их по очереди скалярной переменной, выполняя с каждым последующим присваиванием блок кода
foreach $i (@список) { op_1; op_2; op_3; }
Замечание:Скалярная переменная $i - локальна для данного цикла.
Пример:
@a = qw(one two three four five); foreach $b (reverse @a) { print $b; }
Имя скалярной переменной можно опустить. В этом случае, Вы указали имя переменной $_.
@a = qw(one two three four five); foreach (reverse @a) { print ; }
Используемая в цикле скалярная переменная представляет собой псевдоним для каждой переменной списка, а не просто копию ее значения. Изменяя скалярную переменную Вы изменяете и конкретный элемент списка:
@a = (3, 5, 7, 9); foreach $one (@a) { $one *= 3; } # @one = (9, 15, 21, 27);
Оператор if/unless.
if(выражение) { op_1; op_2; op_3; } else { op_1; op_2; op_3; }
Управляющее выражение вычисляется как строковая величина в скалярном контексте (если это уже строка, то ничего не изменится, если это число, то оно преобразуется в строку). Если строка пуста, либо состоит из одного символа "0", то значение выражения - ложь. Все остальное - "истина".
Пример:
print "how old are you? "; $a = <STDIN> ; chomp($a); if($a < 18) { print "So, you're not old enougt to vote, eh?\n"; } else { print "Old enough! Cool! So go vote!\n"; $voter++; }
Оператор unless:
print "how old are you? "; $a = <STDIN> ; chomp($a); unless($a < 18) { print "Old enough! Cool! So go vote!\n"; $voter++; }
if(выражение) { op_1; op_2; op_3; } elsif(выражение 2) { op_1; op_2; op_3; } else { op_1; op_2; op_3; }
Оператор while/until.
while(выражение) { op_1; op_2; op_3; }
until(выражение) { op_1; op_2; op_3; }