Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
perl.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
388.1 Кб
Скачать

Оператор безусловного перехода goto

Perl поддерживает оператор безусловного перехода goto, который является идентичным такому же оператору языка программирования С. Ниже приведен пример использования оператора goto для вывода чисел от 1 до 10:

$i = 1;

loop:

print $i++, ' ';

if ($i <=10)

{

goto loop;

}

Модификаторы операторов

В языке Perl используются специальные формы конструкции if,unless, while и until, которые позволяют управлять ходом вычислений. В определенных случаях эти cпециальные конструкции могутсделать ваш код более ясным и легко читаемым. Для того, чтобы кодбыло легче читать и его смысл был более очевиден, целесообразновыбирать подходящий формат для записи. Рассмотрим следящее выражение, использующее функцию die для того, чтобы закончить выполнение скрипта, если значение переменной $count меньше чем 10:

if ($count < 10)

{

die;

}

Если расположить функцию die перед оператором if, как показано ниже, число строк кода уменьшится:

die if ($count < 10);

Аналогичным образом, то же самое выражение может быть записано в следующем виде:

($count >= 10) || die;

В данном случае, если переменная $count больше либо равна10, Perl прекращает дальнейшее вычисление в данной строке и функция die не выполняется В противном случае, если переменная$count меньше 10, после вычисления первой части выражения код запускает функцию die и тем самым заканчивает выполнение скрипта. Наконец, в следующем примере использование конструкцииunless также позволяет уменьшить число строк до одной:

die unless ($count >= 10);

Аналогичным образом, следующие циклы while являются идентичными:

$i = 0;

while ($i < 10)

{

$i++;

}

$i = 0;

$i++ while ($i < 10);

Как можно видеть, используя модификацию конструкции, скриптпозволяет сократить число строк в записи цикла до одной. Аналогичным образом, следующие циклы until эквивалентны:

$i = 10;

until ($i >= 10)

{

$i++;

};

$i = 10;

$i++ until ($i >=10);

Примечание: Во всех четырех случаях, даже если выражение для оценивания расположено после инструкции для выполнения, Perl сначала анализирует условие и только потом выполняет инструкцию.

Генерация динамических выражений с помощью функции eval

Поскольку Perl является интерпретируемым языком, ваши скрипты могут использовать Perl для того, чтобы генерировать код <налету>, то есть динамически, во время исполнения скрипта. Именнотак работает отладчик Perl (который сам является Perl-программойс именем Perldb.PL). Проектируя скрипты, вы можете использоватьтакой динамический код для создания динамических переменных именили даже построения специальных подпрограмм. Perl оценивает динамические выражения, используя функцию eval. В следующем примересоздается динамическая инструкция путем присвоения переменной вкачестве значения текста, который, собственно, и содержит требуемую инструкцию языка Perl. Дальнейшие инструкции используют функцию eval для того, чтобы выполнить эту инструкцию:

$perl_statement = 'print "Hello, world\n";';

eval $perl_statement; # выведет Hello, world

$i = 1001;

$varname = '$i';

print eval $varname; # выведет значение $i

Примечание: Использование скриптом функции eval таит в себе опасности, в особенности, если скрипт передает функции eval данные,полученные от пользователя. Используя функцию eval, скрипт можетвыполнить произвольную команду языка Perl, включая даже системные команды. Это дает возможность пользователю контролироватьпрограмму, что может быть особенно рискованным для сетей Internetи Web.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]