【问题标题】:Difference between $@ and $! in perl$@ 和 $! 之间的区别在 perl 中
【发布时间】:2013-07-17 10:00:17
【问题描述】:

Perl 中的$@$! 有什么区别?与 eval 相关的错误使用 $@ 输出。 $! 也用于捕获错误。那么两者有什么区别呢?

【问题讨论】:

    标签: perl


    【解决方案1】:

    来自perldoc perlvar

    变量 $@$!$^E$? 包含有关在执行 Perl 程序期间可能出现的不同类型错误条件的信息。这些变量按报告错误的子系统与 Perl 进程之间的“距离”排序。它们分别对应于 Perl 解释器、C 库、操作系统或外部程序检测到的错误。

    【讨论】:

      【解决方案2】:

      $! 在系统调用失败时设置。

      open my $fh, '<', '/foobarbaz' or die $!
      

      这将输出“没有这样的文件或目录”。

      $@ 包含传递给die 的参数。因此:

      eval {
          open my $fh, '<', '/foobarbaz' or die $!
      };
      if ( $@ ) {
         warn "Caught exception: $@";
      }
      

      如果不使用某种形式的eval,检查$@ 是没有意义的,当你没有调用可以在错误情况下设置它的函数时,检查$! 是没有意义的。

      【讨论】:

        【解决方案3】:

        基于perl_doc

        $!; show C library\'s errno
        $@; show compile error
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-07-05
          • 1970-01-01
          • 2012-02-13
          • 2012-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多