为什么Perl在这里显示“用户代码未捕获的异常”行?

时间:2015-11-09 06:29:11

标签: perl

在这里学习Perl。

我正在使用Strawberry Perl 5版本22。

我有这个脚本应该要求输入密码,并告诉我是否输入了正确的密码或离开了,当我输入错误的密码时,我收到此警告“未捕获的用户代码异常

我的脚本是:

#!D:/perl/perl/bin/perl.exe -wT
# Script name = password.pl
use strict;
use warnings;
use diagnostics;

my $password = "foxtrot";
print "Enter password: ";
my $guess = <STDIN>;
chomp $guess;
if  ($password eq $guess) {
    print "Pass, friend.\n";
}
if ($password ne $guess) {
    die "Go away! imposter!\n";
}

当我输入任何不是狐步舞的单词时,我得到:

Uncaught exception from user code
Go away! imposter!

为什么我从“用户代码”中获取“未捕获的异常”这一行?

2 个答案:

答案 0 :(得分:4)

  

为什么我从用户代码中获得该行&#34;未捕获的异常&#34;?

这是因为您使用use diagnostics加载了diagnostics模块。它通过解释注释警告和错误,在这种情况下,您调用die

$ perl -wle 'die "foo"'
foo at -e line 1.

$ perl -wle 'use diagnostics; die "foo"'
Uncaught exception from user code:
    foo at -e line 1.

答案 1 :(得分:2)

异常消息是由die函数调用与加载的diagnostics模块组合引起的,后者会添加更详细的信息。

您应该考虑使用以下内容:

print "Go away! Imposter!\n";
exit 1;

引用Perl docs,我的重点是:

  

die 引发异常。在eval中,错误消息被填充   进入$@eval以未定义的值终止。 如果   例外是在所有封闭的逃避之外,然后是未被捕获的   异常将LIST打印到STDERR并以非零值退出。如果   您需要使用特定的退出代码退出流程,请参阅exit。

您的die调用是在eval语句之外,因此它会打印消息并因未处理的异常而退出。

相关问题