Модификаторы выражений

Чтобы сделать запись более компактной, после выражения может следовать управляющий модификатор. Например, модификатор if работает по аналогии с блоком if:

print "$n is a negative number.\n" if $n < 0;


Результат получается точно таким же, как при использовании следующего кода (если не считать того, что мы сэкономили на вводе круглых и фигурных скобок):

if ($n < 0) {
print "$n is a negative number.\n";
}


Как мы уже говорили, программисты Perl не любят вводить лишние символы. К тому же более короткая форма хорошо читается на естественном языке: вывести сообщение, если значение $n меньше нуля. Учтите, что условное выражение по-прежнему обрабатывается первым, хотя и записывается в конце. Здесь стандартный порядок обработки слева направо заменяется противоположным порядком. Чтобы понять код Perl, необходимо действовать так, как действует внутренний компилятор Perl, и прочитать команду до конца; только после этого вы поймете, что же в действительности происходит в программе. Существуют и другие модификаторы:

&error("Invalid input") unless &valid($input);
$i *= 2 until $i > $j;
print " ", ($n += 2) while $n < 10;
&greet($_) foreach @person;


Вероятно, вы и сами уже догадались, как они работают. Каждый моQ
дификатор можно переписать по аналогии с модификатором if из преQ
дыдущего примера. Пример:
while ($n < 10) {
print " ", ($n += 2);
}


Обратите внимание на выражение в круглых скобках в списке аргументов print: оно \ увеличивает $n на 2 и сохраняет результат в $n. Затем новое значение возвращается для вывода командой print. Сокращенные формы читаются почти так же, как фразы на естественном языке: вызвать функцию &greet для каждого элемента @person в списке. Удваивать переменную $i, пока она не станет больше $j. В одном из стандартных способов применения этих модификаторов используются команды следующего вида:

print "fred is '$fred', barney is '$barney'\n" if $I_am_curious;


При подобной «инвертированной» записи наиболее важная часть команды записывается в начале. Главной целью команды является отслеживание значений переменных, а не проверка условия. Некоторые программисты предпочитают записывать всю команду в одну строку, иногда с включением символов табуляции перед if для смещения к правому краю, как в нашем примере; другие размещают модификатор if в отдельной строке:

print "fred is '$fred', barney is '$barney'\n"
if $I_am_curious;


Хотя любое выражение с модификатором можно переписать в виде блока («традиционная» запись), обратное не всегда справедливо. С каждой стороны модификатора может находиться только одно выражение. Следовательно, вы не можете использовать запись «что-то if что-то while что-то until что-то unless что-то foreach что-то»; все равно получится слишком сложно. Кроме того, несколько команд нельзя разместить слева от модификатора. Если с каждой стороны требуется нечто большее, чем простое выражение, запишите код в «традиционной» форме – с круглыми и фигурными скобками. Как упоминалось ранее в связи с модификатором if, первым всегда вычисляется управляющее выражение (справа), как в традиционной форме. Модификатор foreach не позволяет выбрать другую управляющую переменную – всегда используется переменная $_. Обычно это не создает проблем, но если вы хотите использовать другую переменную, команду придется переписать в виде традиционного цикла foreach.
Теги:
управляющие конструкции
Добавлено: 20 Июля 2018 19:44:57 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...