Perl
+ -

Perl 错误处理

2019-09-09 1 0

程序运行过程中,总会碰到各式各样的错误,比如打开一个不存在的文件。

程序运行过程中如果出现错误就会停止,我们就需要使用一些检测方法来避免错误,从而防止程序退出。

Perl 提供了多中处理错误发方法,接下来我们一一介绍。

if 语句

if 语句 可以判断语句的返回值,实例如下:

if(open(DATA, $file)){
   ...
}else{
   die "Error: 无法打开文件 - $!";
}

程序中变量 $! 返回了错误信息。 我们也可以将以上代码简化为如下代码:

open(DATA, $file) || die "Error: 无法打开文件 - $!";

unless 函数

unless 函数与 if 相反,只有在表达式返回 false 时才会执行,如下所示:

unless(chdir("/etc")){
   die "Error: 无法打开目录 - $!";
}

unless 语句在你要设置错误提醒时是非常有用的。我么也可以将以上代码简写为:

die "Error: 无法打开目录!: $!" unless(chdir("/etc"));

以上错误信息只有在目录切换错误的情况下才会输出。


三元运算符

以下是一个三元运算符的简单实例:

print(exists($hash{value}) ? '存在' : '不存在',"\n");

以上实例我们使用了三元运算符来判断哈希的值是否存在。

实例中包含了一个表达式两个值,格式为: 表 达式 ? 值一 : 值二


warn 函数

warn 函数用于触发一个警告信息,不会有其他操作,输出到 STDERR(标准输出文件),通常用于给用户提示:

chdir('/etc') or warn "无法切换目录";

die 函数

die 函数类似于 warn, 但它会执行退出。一般用作错误信息的输出:

chdir('/etc') or die "无法切换目录";

Carp 模块

Perl 脚本中,报告错误的常用方法是使用 warn() 或 die() 函数来报告或产生错误。而对于 Carp模块,它可以对产生的消息提供额外级别的控制,尤其是在模块内部。

标准 Carp 模块提供了 warn() 和 die()函数的替代方法,它们在提供错误定位方面提供更多信息,而且更加友好。当在模块中使用时,错误消息中包含模块名称和行号。

carp 函数

carp函数可以输出程序的跟踪信息,类似于 warn 函数,通常会将该信息发送到 STDERR:

package T;
require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;
sub function {
   carp "Error in module!";
}
1;

在脚本调用以下程序:

use T;
function();

执行以上程序,输出结果为:

Error in module! at test.pl line 4

cluck 函数

cluck() 与 warn() 类似,提供了从产生错误处的栈回溯追踪。

package T;
require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp qw(cluck);
sub function {
   cluck "Error in module!";
}
1;

在脚本调用以下程序:

use T;
function();

执行以上程序,输出结果为:

Error in module! at T.pm line 9
    T::function() called at test.pl line 4

croak 函数

croak() 与 die() 一样,可以结束脚本。

package T;
require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;
sub function {
   croak "Error in module!";
}
1;

在脚本调用以下程序:

use T;
function();

执行以上程序,输出结果为:

Error in module! at test.pl line 4

confess 函数

confess() 与 die() 类似,但提供了从产生错误处的栈回溯追踪。

package T;
require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;
sub function {
   confess "Error in module!";
}
1;

在脚本调用以下程序:

use T;
function();

执行以上程序,输出结果为:

Error in module! at T.pm line 9
    T::function() called at test.pl line 4

0 篇笔记 写笔记

PHP 函数不定参数和默认参数
PHP作为一门弱化语言,支持c语言类似的不定参数和可选参数,只是格式书写格式不致,如:不定参数:使用函数fun_num_args()获取参数个数,使用fun_get_args()获取参数,指定索引则获取第内个参数,未指定索引指获取所有参数并生成数组返回。
XPath在要与XPath表达式一起使用的节点上定义以下运算符。序号Operator描述 1/用 于选择特定节点下的节点。 2//用 于从根节点选择节点 3[…]用 于检查节点值 4|用 于两个节点集的并集 XPath在要与XPath表达式一起使用的节点上定义以下功能。序号Ope......
Perl,一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发。Perl语言的应用范围很广,除CGI以外,Perl被用于图形编程、系统管理、网络编程、金融、生物以及其他领域。由于其灵活性,Perl被称为脚本语言中的瑞士军刀。Pe......
函数是一起执行任务的一组语句,每个C程序都有至少一个函数,即 main(),所有最简单的程序都可以定义其他函数函数 declaration 告诉编译器函数的名称,返回类型和参数,函数定义提供函数的实际主体。C标准库提供了程序可以调用的许多内置函数。如, strcat()可以连接两个字符串, mem......
random() 方法返回随机生成的一个实数,它在[0,1)范围内。语法以下是 random() 方法的语法:import randomrandom.random()注 意:random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。参数无返回值返回随......
atan() 返回x的反正切弧度值。语法以下是 atan() 方法的语法:import mathmath.atan(x)注 意:atan()是不能直接访问的,需要导入 math 模块,然后通过 math 静态对象调用该方法。参数x — 一个数值。返回值返回x的反正切弧度值。实例以下展示了使用 ata......
degrees() 将弧度转换为角度。语法以下是 degrees() 方法的语法:import mathmath.degrees(x)注 意:degrees()是不能直接访问的,需要导入 math 模块,然后通过 math 静态对象调用该方法。参数x — 一个数值。返回值返回一个角度值。实例以下展示......
MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP。 在这些语言中,Mysql在PHP的web开发中是应用最广泛。在本教程中我们大部分实例都采用了 PHP 语言。如果你想了解 Mysql 在 PHP 中的应用,可以访问我们的 PHP教程。PHP提供了多种方式来访问和......
ios_event::eof()函数用于检查是否设置了eofbit。 当在与流相关联的序列达到文件结束时,通过所有标准输入操作来设置该标志。声明下面是eof()const函数的声明。bool eof() const;返回值如果设置流的eofbit错误状态标志(表示最后输入操作已经到达文件结束),则返......
如果要将一维数组作为参数传递给函数,则必须以下列三种方式之一声明函数形式参数,并且所有三种声明方法都会产生类似的结果,因为每个都告诉编译器接受一个整数指针。类似地,可以将多维数组作为形式参数传递。方式-1使用指针形式参数如下(在下一章学习指针的用法)。- (void) myFunction(int ......
max() 方法返回给定参数的最大值,参数可以为序列。语法以下是 max() 方法的语法:max( x, y, z, .... )参数x — 数值表达式。y — 数值表达式。z — 数值表达式。返回值返回给定参数的最大值。实例以下展示了使用 max() 方法的实例:#!/usr/bin/python......
PHP参数化函数是带有参数的函数。 您可以在函数中传递任意数量的参数。 这些传递的参数作为函数中的变量。它们在函数名称之后,在括号内指定。输出取决于作为参数传递到函数中的动态值。PHP参数化示例1 加减法在这个例子中,我们在两个函数add()和sub()中传递了两个参数$x和$y。 文件:para.......
str() 函数将对象转化为适于人阅读的形式。语法以下是 str() 方法的语法:class str(object='')参数object — 对象。返回值返回一个对象的string格式。实例以下展示了使用 str() 方法的实例:>>>s = 'rumen......
tuple 函数将列表转换为元组。。语法以下是 tuple 的语法:tuple( seq )参数seq — 要转换为元组的序列。返回值返回元组。实例以下展示了使用 tuple 的实例:>>>list1= ['Google', 'Taobao', &#......
intern() 方法返回字符串对象的规范化表示形式。它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。语法public String intern()参数无返回值一个字符串,内容与此......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!