Perl错误处理

本文概述

在执行程序时, 错误也会与程序一起运行。如果无法正确处理这些错误, 则程序可能无法顺利运行。

错误处理使我们能够通过采取适当的措施来处理这些错误并平稳地运行程序。可以通过错误处理来处理各种类型的错误。

你需要捕获错误并通过纠正错误来平稳地运行程序。 Perl提供了许多这样做的方法, 如下所示。


没有Die功能的Perl脚本

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

use strict;
use warnings;
open(my $fh, '>', 'sssit/srcmini/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()函数只会照常打开文件。 die()函数将引发异常并仅退出脚本。

在” open or die”函数中, 左侧具有open()函数。在右侧, 我们具有die()函数。

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

如果open()函数返回false, 则脚本进入die()函数, 该函数引发异常并退出脚本。

在这里, 在此示例中, 我们给出了错误的文件路径, 这是由于die()函数将执行并退出脚本。

use strict;
use warnings;
open(my $fh, '>', 'sssit/srcmini/file1.txt') or die;
print $fh "Example to show Error Handling\n";
close $fh;
print "done\n";

输出

Died at script.pl

在输出中, 当我们使用die()函数脚本时, 遇到错误将退出。因此, 不会打印”完成”。


Perl在模具中添加说明

如果要添加有关该错误的说明, 可以将其添加到die()函数中。如果你的脚本死了, 此说明将作为错误消息打印。

use strict;
use warnings;
open(my $fh, '>', 'sssit/srcmini/report.txt')
  or die "Could not open file due to 'sssit/srcmini/report.txt'";
close $fh;
print "done\n";

输出

Could not open file due to 'sssit/srcmini/report.txt'at script.pl
 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/srcmini/file1.txt';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!"; 
close $fh;
print "done\n";

输出

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

Perl警告功能

警告功能会发出警告消息, 但不会退出脚本。该脚本将继续运行。因此, 当你只想打印警告消息并继续执行程序的其余部分时, 它很有用。

use strict;  
use warnings;  
my $filename = 'sssit/srcmini/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标准库。 confess()函数在Carp库中使用。我们已通过$!作为其论据。

use strict;  
use warnings;
use Carp;
my $filename = 'sssit/srcmini/file1.txt';  
open(my $fh, '>', $filename) or confess($!);   
print "done\n";

输出

No such file or directory.
done

Perl评估功能

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

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

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

使用严格使用警告;我的$结果=评估{我的$ x = 10;我的$ y = 0;我的$ result2 = $ x / $ y;打印” $ result2″; };打印”脚本仍在运行!\ n”;除非($ result){打印$ @; }

输出

Script is still running!
Illegal division by zero

查看上面的输出, 脚本继续运行, 因为它们没有语法错误。

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

当脚本简短包含十行时, 使用die()函数。 die()函数也可以不带$!使用。

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

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?