Perl 错误处理

2024 年 8 月 29 日 | 4 分钟阅读

在程序执行过程中,错误也会随之出现。如果这些错误没有被正确处理,程序可能无法顺利运行。

错误处理允许我们通过采取适当的措施来处理这些错误,从而使程序顺利运行。可以通过错误处理来处理各种类型的错误。

您需要捕获错误,并通过纠正错误来使程序顺利运行。Perl 提供了多种方法来实现这一点,如下所示。


不带 Die 函数的 Perl 脚本

die() 函数会提供适当的错误消息。它在遇到错误时会立即终止脚本。如果在脚本中不使用 die() 函数,脚本将继续运行。

输出

Print() on closed filehandle $fh at script.pl 
done

查看上面的输出,脚本在遇到错误时仍然继续运行并打印“done”。


Perl Open 或 Die

open() 函数像往常一样打开文件。die() 函数抛出一个异常并直接退出脚本。

在“open or die”函数中,左边是 open() 函数。右边是 die() 函数。

如果 open() 函数返回 true,脚本会继续执行下一行,die() 函数不会执行。

如果 open() 函数返回 false,脚本会执行 die() 函数,该函数会抛出一个异常并退出脚本。

在这个例子中,我们给出了错误的文件路径,因此 die() 函数将会执行并退出脚本。

输出

Died at script.pl

在输出中,由于我们使用了 die() 函数,脚本在遇到错误时会退出。因此,“done”没有被打印。


Perl 在 Die 中添加解释

如果您想添加一些关于错误的解释,可以在 die() 函数中添加。如果您的脚本终止,这个解释将作为错误消息打印出来。

输出

Could not open file due to 'sssit/javatpoint/report.txt'at script.pl

Look at the above output, we got an explanation about the error in our script.


Perl 使用 $! 进行错误报告

$! 变量是 Perl 语言中的一个内置变量。通过在 die() 函数中添加解释,我们知道错误消息,但仍然不知道错误背后的原因。要了解错误的真正原因,请使用 $! 变量。它将打印操作系统关于该文件的消息。

输出

Could not open file 'sssit/javatpoint/file1.txt' No such file or directory

Perl warn 函数

warn 函数会给出一个警告消息,但不会退出脚本。脚本将继续运行。因此,当您只想打印警告消息并继续执行程序的其余部分时,它很有用。

输出

Can't open file at hw.pl at line 4.
done

查看上面的输出,我们打印了“done”来表明执行在打印警告消息后仍然继续。

Perl 使用 confess 函数进行错误报告

现代的错误处理方法是使用 Carp 标准库。confess() 函数在 Carp 库中使用。我们将 $! 作为它的参数传递。

输出

No such file or directory.
done

Perl eval 函数

eval() 函数是 Perl 中的一个内置函数,用于检测普通的致命错误。eval() 函数提供一个代码块,而不是传递到字符串中。

如果存在语法错误,eval 块将失败。但是,如果发生运行时错误,脚本将继续运行。

在下面的程序中,没有语法错误。

use strict; use warnings; my $result = eval { my $x = 10; my $y = 0; my $result2 = $x/$y; print "$result2"; }; print "脚本仍在运行!\n"; unless($result) { print $@; }

输出

Script is still running!
Illegal division by zero

查看上面的输出,脚本由于没有语法错误而继续运行。

die() 和 confess() 之间的区别

当脚本短到只有十行左右时,可以使用 die() 函数。die() 函数也可以不带 $! 使用。

confess() 函数在 carp 包中使用。对于较大的脚本,最好使用 confess 函数。

下一个主题Perl DBI