В следующем примере функция eval
В следующем примере функция 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:
Содержание Назад Вперед