Иллюстрированный самоучитель по Perl



         

Функции для работы со строками - часть 8


В следующем примере функция eval о применяется для перехватывания ошибки, связанной с делением на 0 при вычислении функции ctg(x). Используются встроенные функции sin, cos и warn. Последняя функция осуществляет вывод сообщения, задаваемого ее аргументом, на стандартное устройство вывода ошибок STDERR.

#!/bin/peri

$fi = 0.314159265358979;

$f = '$ctg = cos($x)/sin($x)

for $i (0..10) {

$x = $i*$fi;

eval $f;

print "x= $x ctg(x) = $ctg\n" if defined $ctg;

warn "x= $x ", $@ if not defined $ctg; };

Вывод программы выглядит следующим образом

х= 0 Illegal division by zero at (eval 1) line 1. x= 0.314159265358979 ctg(x) =3.07768353717526 x= 0.628318530717958 ctg(x) = 1.37638192047118

Замечание

Иногда бывает полезно искусственно вызвать исключительную ситуацию. Для этого можно воспользоваться функцией die () LIST. Назначение функции die () — генерировать исключения. Если функция die () вызывается в основной программе вне функции eval (), то она осуществляет аварийное завершение основной программы и выводит сообщение об ошибке LIST на стандарт* ное устройство вывода ошибок STDERR. Если она вызывается внутри функции eval (), то осуществляет аварийное завершение eval () и помещает сообщение об ошибке в специальную переменную $@.

Функция pos()

pos [$SCALAR]

возвращает позицию, в которой завершился последний глобальный поиск $scALAR=~m/.../g, осуществленный в строке, задаваемой переменной $SCALAR. Возвращаемое значение равно числу length($') + length($&). Следующий глобальный поиск m/.../g в данной строке начнется именно с этой позиции.

Если аргумент $ SCALAR отсутствует, возвращается позиция завершения последнего глобального поиска, осуществленного в строке $_.

$words = "one two three four"; while ($words =~ m/\w+/g) {

print "pos=",pos($words)," length(\$~)=",length($'),

" length(\$s)=",length($s),"\n"; }

В результате выполнения данного скрипта будут выведены номера позиций, соответствующих окончаниям слов в строке $words:




Содержание  Назад  Вперед