Поиск

Выражения и операторы

После того как вы познакомились со скалярными типами данных, можно попробовать сделать что-то полезное на Perl. Программа Perl — набор выражений и операторов, выполняемых последовательно от начала и до конца, если, конечно, вы не изменяете ход программы с помощью специальных операторов, описанных на 3-м занятии, "Управление процессом выполнения программы". Пример готовой программы на Perl приведен в листинге 2.1.

Проведем анализ программы.

  • Строка 1. Как вы помните, в этой строке указывается путь к интерпретатору Perl. Ключ -w говорит о том, что нужно выводить все предупреждения.
  • Строка 3. В этой строке выполняется оператор присваивания. Скалярной переменной $radius присваивается число 50.
  • Строка 5. В этой строке также выполняется оператор присваивания. В правой части оператора присваивания находится выражение. Выражение содержит скалярную переменную $radius, операторы * и ** (ниже описано их действие) и числовой скаляр 2. Переменной $агеа присваивается вычисленное значение выражения.
  • Строка 6. В этой строке распечатывается результат вычислений, находящийся в переменной $агеа.

Выражение — это набор операторов, имеющих значение. Например, 2 — допустимое выражение, как и 54*$r, "Java", sin($pi*8) и $t=6. Значения выражений вычисляются в ходе выполнения программы. Вначале программа вычисляет значения функций, операторов и скалярных констант, составляющих выражение, а затем — результирующее значение. Выражения можно использовать в операторах присваивания, в других выражениях или в операторах Perl.

Основные операторы

Как было показано в листинге 2.1, для присваивания используется оператор присваивания =. Этот оператор помещает значение выражения, находящегося в правой части, в переменную, указанную в левой части. Например:

$title= "Унесенные ветром";
$pi=3.14159;

Оператор, находящийся в правой части, должен иметь определенное значение, которое можно присвоить переменной, т.е. правая часть оператора присваивания должна являться выражением. Сама по себе операция присваивания также является выражением, значение которого указывается в правой части оператора присваивания. Это означает, что в приведенной ниже строке кода переменным $а, $Ь и $с присваивается значение 42:

$a=$b=$c=42;

В этой строке переменной $с присваивается значение 42, затем $Ь присваивается
значение выражения $с=42 (равное 42). Переменной $а присваивается значение выра
жения $Ь=42. Переменная, которой присвоено значение, может использоваться в пра
вой части оператора присваивания, как показано ниже: . . .

$a=89*$a;
$count=$count+l;

Правая часть выражения оператора присваивания вычисляется с использованием старого значения переменной $а или $count. Оператор присваивания во второй строке имеет специальное название в Perl — инкремент. Мы еще остановимся на таких операторах подробнее.

Числовые операторы

У Perl имеется несколько операторов, которые предназначены для использования в числовых выражениях. Некоторые из них вам уже встречались, а с остальными мы сейчас познакомимся. Первой разновидностью уже знакомых вам операторов являются арифметические операторы. В табл. 2.3 приведен их список.

Арифметические операторы выполняются в порядке приоритетов, принятых в математике: сначала возведение в степень, затем умножение, деление, вычисление остатка от деления и только затем сложение и вычитание. Если вы не уверены; в каком порядке будут выполняться операции в вашем выражении, используйте скобки. В выражениях с вложенными скобками вначале вычисляются элементы выражения во внутренних скобках:

5*6+9; | Значение 39
5*(6+9); | Значение 75
5+(6*(4-3));| Значение 11
Строковые операторы

Perl может оперировать не только числами, но и строками. Первым строковым оператором, который мы рассмотрим, является оператор конкатенации (.) • Этот оператор берет строку, находящуюся слева от него, и строку справа и возвращает строку, объединяющую предыдущие две, например:

$а="Привет, мой Свет!";
$Ь=" Как я рад тебя видеть";
$с=$а . $Ь;

В этом примере переменные $а и $Ь имеют простые строковые значения. В последней строке переменной $с присваивается значение Привет, мой Свет! Как я рад тебя видеть, при этом значения переменных $а и $Ь не изменяются.

Конкатенацию строк можно выполнить и другим способом. Раньше мы уже говорили, что внутри строк, заключенных в двойные кавычки, Perl "выискивает" имена переменных. Найденные переменные интерпретируются. Это означает, что имя переменной внутри строки в двойных кавычках заменяется реальным значением этой переменной, например:

$name="Джон";
print "Привет, $name!";

В этом примере Perl ищет в строке в двойных кавычках имена переменных, находит имя $name и подставляет вместо него строку Джон. Этот процесс называется интерпретацией значения переменных. Для того чтобы переменные не интерпретировались, нужно заключить строку в одинарные кавычки (тогда Perl вообще никак не будет анализировать эту строку) или поставить обратную косую черту перед идентификатором имени переменной, например: . -

$name="Ringo";
print 'Я использую переменную Sname'; | He будет печатать слово "Ringo"
print "Я использую переменную $name"; | Также не будет печатать слово "Ringo"

Оба оператора print из предыдущего примера напечатают строку Я использую переменную $name, при этом переменная Sname не будет интерпретирована. Итак, оператор конкатенации можно заменить строками в двойных кавычках следующим образом:

$fruit1="яблоки";
$fruit2="и груши" ;
$bowl="$fruitl $fruit2";

Там, где Perl не может четко выделить имя переменной из остальной части строки, заключите имя переменной в фигурные скобки {}. Подобный прием позволяет Perl легко определить имя переменной, например:

$name="Thurs";
print "I went to the fair on ${date}day";

Без этих скобок непонятно, какую переменную должен интерполировать Perl — $date или $dateday. Фигурные скобки однозначно указывают, что $date. . Следующим строковым оператором является оператор повторения х. В операторе х указываются два аргумента — строка, которую необходимо повторить, и число повторений. Например:

$line="-" х 70;

В предыдущем примере символ "-" повторяется 70 раз оператором х. Результат сохраняется в переменной $line.