perl eval两种使用方式

Perl eval使用方法

eval捕获错误

Perl代码在发生编译错误时会将错误信息保存在$!变量。
而我们常用的处理方式是使用die强制终结程序,这样往往会导致程序过早终止。

open FILEHANDLE,"<",$filename or die $!;  ## die强制退出

Perl使用eval操作符作为错误捕获机制。

  • 作为捕获错误使用时,eval的参数是用一对‘{’ ‘}’包围的代码块
eval {$average = $total / $count};
  • 当发生错误时,代码块将停止执行,eval语句块之后的程序仍然继续执行

  • 通常在eval语句块之后,紧跟着立即检查$@变量,这个变量要么为空(eval没有错误),要么包含代码执行失败的错误消息。

eval {$average = $total / $count};
print "some error: $@" if $@;
  • eval语句块有类似于子例程的返回值
    • 返回最后一行表达式的求值
    • 使用return关键字显式的返回
    • 如果发生错误,返回undef
$average = eval { $total / $count}; ## 同 eval {$average = $total / $count};

my @array = eval {my @arr = qw/a b c d/; return @arr;};  ##  @array = ("a", "b", "c", "d");

eval运行时编译代码

在运行时通过字符串的方式编译和执行代码

eval语句块的第二种形式,它的参数是字符串表达式而不是代码块。

my $sum = 0;
eval '$sum = 2 + 2;'print "The sum is $sum\n";
## The sum is 4
### 用eval动态生成一个复杂的hash
use warnings;
use strict;
use Data::Dumper; ## 提供Dumper函数打印复杂的数据结构


my %hash;  ## 声明hash

my $value = "this is value";  ## 这个是一会儿要放入hash的值

my $string = '$hash';   ##  给eval编译的字符串

my $level = 10;  ##  从外界获取的数据
## 组装hash
for(0 .. $level) {
    $string .= "{$_}";
}
$string .= '= $value;';  ##  $hash{0}{1}{2}...{$level} = $value

eval $string;
print $@ if $@;

print Dumper(\%hash);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值