分配到$是犹太教!在Perl?

Pau*_*han 6 error-handling perl

分配给$是否可以!在Perl中出错?

例如,

if( ! (-e $inputfile))
{
      $! = "Input file $inputfile appears to be non-existent\n";
      return undef;
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以处理顶层的所有错误.

谢谢.

yst*_*sth 12

如果您分配给$ !,它将被放置在系统errno变量中,该变量只接受数字.所以你实际上可以这样做:

use Errno "EEXIST";
$! = EEXIST;
print $!;
Run Code Online (Sandbox Code Playgroud)

并获取已定义系统错误号的字符串值,但您无法执行所需操作 - 将其设置为任意字符串.这样的字符串将为您提供参数"..."在标量赋值警告中不是数字,并将errno设置为0.

另一个问题是$!可以通过任何系统调用更改.因此,您只能相信它具有您设置的值,直到您进行打印或其他任何操作.您可能想要自己的错误变量.


Dav*_*ogt 9

好吧,文档 说它基本上是系统错误的指标.所以我不会分配它,你只是让你的lib的用户疯了.

改为使用例外:

eval { # this ain't the evil eval
   # some code
   die $something;
}
if (my $err = $@) {
   # exception handling
}
Run Code Online (Sandbox Code Playgroud)

请注意,你可以"抛出"或死掉任何你需要的东西.