• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >perl > Perl eval函数使用实例

Perl eval函数使用实例

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了perl eval,eval函数,matlab eval函数,js eval函数,python eval函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Perl 作为一种脚本语言可以实时地生成和执行代码。这种特性可以把代码的编译推迟到运行时,所以又称为“动态代码”。另外, Perl 也如 Java 、 C++ 一样提供了异常处理机制。本文将初步探讨Perl 中实现动态代码和异常处理机制的函数: eval 。如有错误不足,欢迎讨论和批评指正。

eval 函数可以看作是 Perl 虚拟机,它的参数就是一段 Perl 代码。利用 'perldoc –f eval'可以获取 eval 函数使用帮助,其中介绍了它的两种使用方式:

eval EXPR
</div>

EXPR 是一个的表达式,例如:

eval "print $a" ;
eval 'print $a' . ', $b' ;
eval 1 + 3 ;
eval 'print ' . '$a + $b, "\n"' ;
eval $command;#$command = ‘print “hello Perl”'
eval $ARGV[0];
</div>

在执行时, Perl 解释器会首先解析表达式的值,然后将表达式值作为一条 Perl 语句插入当前执行上下文。所以,新生成的语句与 eval 语句本身具有相同的上下文环境。这种方式中,每次执行eval 语句,表达式都会被解析。所以,如果 eval EXPR 如果出现在循环中,表达式可能会被解析多次。 eval 的这种方式使得 Perl 脚本程序能实时生成和执行代码,从而实现了“动态代码”。

eval BLOCK
</div>

BLOCK 是一个代码块,例如:

eval {print $a};
eval {$a = 1, $b = 2, $c = $a + $b};
</div>

与第一种方式不同, BLOCK 只会被解析一次,然后整个插入当前 eval 函数所在的执行上下文。由于解析上的性能的优势,以及可以在编译时进行代码语法检查,这种方式通常被作为 Perl 用来为一段代码提供异常捕捉机制,虽然前一种方式也可以。

按帮助的名称,称 eval 的参数程序为“小程序” (mini-program) 。在两种方式中, eval 函数的返回值都是小程序的最后一条语句的值,如果遇到 return 语句,与子例程相同。

Script1:

#!/usr/bin/perl -w
 
push ( @program,'$i = 1;');
push ( @program,'$i = 3; $j = 2; $k = $i + $j');
push ( @program, '$i = 3; return 24; $k = $i + $j');
 
foreach $exp (@program)
{
    $rtn =eval($exp);
    print $rtn,"\n";
}
</div>

Output:

1
5
24
</div>

如果小程序中有语法错误、运行时错误遇到 die 语句, eval 将返回 undef 。错误码被保存在$@ 中。

Script2:

#!/usr/bin/perl -w
 
push ( @program, '$i = 3; die "error message"; $k = $i + $j');
 
foreach $exp (@program)
{
    $rtn =eval($exp);
    if ( ! defined ( $rtn))
    {
       print "Exception: " , $@,"\n";
    }
    else
    {
       print $rtn,"\n";
    }
} ;
</div>

Output:

Exception: error message at (eval 1) line 1.
</div>

Script3:

#!/usr/bin/perl -w
 
# a run-time error
eval '$answer =' ;   # sets $@
warn $@ if$@;
</div>
Output:
syntax error at (eval 1) line 2, at EOF
</div>

</div>

您可能想查找下面的文章:

  • Perl eval函数使用实例

相关文章

  • perl 变量 $/ 的用法解析 上下文为行模式时,$/ 定义以什么来区分行
  • 用python下载百度文库的代码
  • Perl模块编写说明
  • perl调用外部命令(g)awk的方法
  • perl与shell获取昨天、明天或多天前的日期的代码
  • Perl哈希表用法解析
  • perl用变量做句柄介绍
  • perl use vars pragma使用技巧
  • Perl删除前导和拖尾空白(删除左右空格、空白字符)
  • 在Perl中使用Getopt::Long模块来接收用户命令行参数

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 写了个perl的删除程序
    • perl中使用signal(信号)实例
    • perl的POD权限问题处理
    • 使用perl实现拆分数据表(mysql)并迁移数据实例
    • 用python下载百度文库的代码
    • FTP自动上传文件的perl脚本以及配置文件
    • 使用Perl生成随机密码
    • perl 采集入库脚本分享
    • Perl split字符串分割函数用法指南
    • Perl实现高水线算法(解决多值比较问题方法)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有