Perl 函数探讨.doc_第1页
Perl 函数探讨.doc_第2页
Perl 函数探讨.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Perl eval函数探讨 Perl eval 函数探讨 2006-8-27 Perl 作为一种脚本语言可以实时地生成和执行代码。这种特性可以把代码的编译推迟到运行时,所以又称为“动态代码”。另外, Perl 也如 Java 、 C+ 一样提供了异常处理机制。本文将初步探讨 Perl 中实现动态代码和异常处理机制的函数: eval 。如有错误不足,欢迎讨论和批评指正。 eval 函数可以看作是 Perl 虚拟机,它的参数就是一段 Perl 代码。利用 perldoc f eval 可以获取 eval 函数使用帮助,其中介绍了它的两种使用方式: l eval EXPR EXPR 是一个的表达式,例如: eval print $a ; eval print $a . , $b ; eval 1 + 3 ; eval print . $a + $b, n ; eval $command;#$command = print “hello Perl” eval $ARGV0; 在执行时, Perl 解释器会首先解析表达式的值,然后将表达式值作为一条 Perl 语句插入当前执行上下文。所以,新生成的语句与 eval 语句本身具有相同的上下文环境。这种方式中,每次执行 eval 语句,表达式都会被解析。所以,如果 eval EXPR 如果出现在循环中,表达式可能会被解析多次。 eval 的这种方式使得 Perl 脚本程序能实时生成和执行代码,从而实现了“动态代码”。 l eval BLOCK BLOCK 是一个代码块,例如: eval print $a; eval $a = 1, $b = 2, $c = $a + $b; 与第一种方式不同, 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; Output: 1 5 24 如果小程序中有语法错误、运行时错误遇到 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; ; Output: Exception: error message at (eval 1) line 1. Script3: #!/usr/bin/perl -w # a run-time error eval $

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论