Perl教程
Perl控制语句
Perl高级

Perl 错误处理

Perl 错误处理

在执行程序时,错误也会随着程序一起运行。如果这些错误处理不当,那么程序可能无法顺利运行。
错误处理让我们通过采取适当的行动来处理这些错误并顺利运行程序。错误处理可以处理各种类型的错误。
您需要通过纠正错误来捕获错误并顺利运行您的程序。 Perl 提供了多种方法,如下所示。

没有 Die 函数的 Perl 脚本

die() 函数给你一个正确的错误信息。它在遇到错误时立即终止脚本。如果您不在脚本中使用 die() 函数,您的脚本将继续运行。
use strict;
use warnings;
open(my $fh, '>', 'sssit/lidihuo/file1.txt');
print$fh "Example to show Error Handling\n";
close $fh;
print"done\n";
输出:
Print() on closed filehandle $fh at script.pl 
done
看上面的输出,脚本继续运行,遇到错误打印'done'。

Perl Open or Die

open() 函数只会像往常一样打开你的文件。 die() 函数抛出异常并退出脚本。
在'open or die' 函数中,在左侧我们有open() 函数。在右侧,我们有 die() 函数。
如果 open() 函数返回 true,则脚本继续执行下一行,并且 die() 函数不会执行。
如果 open() 函数返回 false,然后脚本继续执行 die() 函数,该函数抛出异常并退出脚本。
在此示例中,由于 die(),我们给出了错误的文件路径函数将执行并退出脚本。
use strict;
use warnings;
open(my $fh, '>', 'sssit/lidihuo/file1.txt') or die;
print$fh "Example to show Error Handling\n";
close $fh;
print"done\n";
输出:
Died at script.pl
在输出中,当我们使用 die() 函数时,脚本在遇到错误时退出。因此,不会打印"完成"。

Perl 在 Die 中添加解释

如果你想对错误添加一些解释,你可以在 die() 函数中添加它。如果您的脚本终止,此说明将作为错误消息打印出来。
use strict;
use warnings;
open(my $fh, '>', 'sssit/lidihuo/report.txt')
  or die "Could not open file due to 'sssit/lidihuo/report.txt'";
close $fh;
print"done\n";
输出:
Could not open file due to 'sssit/lidihuo/report.txt'at script.pl

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

使用 $! 的 Perl 错误报告!

$!变量是 Perl 语言中的内置变量。通过在 die() 函数中添加解释,我们知道错误消息,但我们仍然不知道其背后的原因。要知道错误的确切原因,请使用 $! 变量。它将打印操作系统告诉的关于文件的消息。
use strict;
use warnings;
my $filename = 'sssit/lidihuo/file1.txt';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!"; 
close $fh;
print"done\n";
输出:
Could not open file 'sssit/lidihuo/file1.txt' No such file or directory

Perl 警告函数

警告函数给出警告消息但不退出脚本。脚本将继续运行。因此,当您只想打印警告消息并继续执行程序的其余部分时,它很有用。
use strict;  
use warnings;  
my $filename = 'sssit/lidihuo/file1.txt';  
open(my $fh, '>', $filename) or warn "Can't open file";   
print"done\n";
输出:
Can't open file at hw.pl at line 4.
done
看上面的输出,我们已经打印了'done'以表明即使在打印警告消息后执行仍在继续。

使用忏悔函数的Perl错误报告

错误处理的现代方法是使用 Carp 标准库。承认() 函数在鲤鱼库中使用。我们已经通过了 $!作为它的论据。
use strict;  
use warnings;
use Carp;
my $filename = 'sssit/lidihuo/file1.txt';  
open(my $fh, '>', $filename) or confess($!);   
print"done\n";
输出:
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 "Script is still running!\n"; unless($result) { print $@; }
输出:
Script is still running!
Illegal division by zero
看上面的输出,脚本继续运行,因为它们没有语法错误。

die() 和confess() 的区别

当脚本短包含十行时使用 die() 函数。 die() 函数也可以在没有 $! 的情况下使用。
confess() 函数在 carp 包中使用。对于较大的脚本,最好使用忏悔功能。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4