在这里学习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!
为什么我从“用户代码”中获取“未捕获的异常”这一行?
答案 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语句之外,因此它会打印消息并因未处理的异常而退出。