perl eval
eval 表达式: eval 块: eval 在第一种形式,通常称为一个字符串eval EXPR 返回值是被解析的和被执行的作为一个小小的Perl程序。 表达式的值(是它本身决定的在标量上下文环境)是有限被解析, 如果这里没有错误,作为一个block执行在当前Perl程序的词法上下文。 这意味着,特别情况下, 任何外部的词法变量时可见的,任何包变量设置或者子函数和 格式定义 之后仍旧存在 注意 eval执行值是每次都被解析的, 如果EXPR 被省略, 评估$_. 这种形式是典型的用于延迟解析。 如果unicode_eval 功能是被启用( 默认是在5.16或者更多的版本) EXPR 或者$_ 是作为一个字符串,因此 use utf8 声明没有影响, 源过滤器是被禁止的。 在没有unicode_eval的功能下, 字符串有时候回对待为 字符和作为字节, 取决于内部编码,源过滤器激活eval 展现不稳定, 如果字符串扩展一个标量包含一个浮点数. 标量可能扩展为字母,比如 "NaN" or "Infinity" 在一个use locale的范围内. 第2中形式中, BLOCK里的代码只被解析一次,在同一时间围绕代码 eval本身是被解析-- 被执行在当前的Perl程序的上下文。 这种形式通常用来捕获异常。 最后的分号,如果有的话,可以从EXPR的值或者BLOCK里省略 在这两种形式中, 返回值是最后一个表达式计算的值, 一个return语句也可以使用,就像在子函数里。 表达式提供的返回值是计算为空白的,标量,或列表上下文, 依赖eval 本身的列表上下文。 如果有一个语法错误或者运行时错误,或者一个"die" 语句被执行, "eval" 返回undef 在标量上下文环境或者一个空的列表在列表环境, $@是存放错误信息的。(在5.16之前,一个bug 导致"undef" 被返回在列表上下文对于符号错误, 但是不是运行错误)
. 如果没有错误, $@是空的字符串。 一个控制流操作像 "last" 或者"goto" 可以绕过$@设置。 要注意的是,使用"eval" 不会沉默perl输出警告道STDERR, 也不会把警告信息塞到$@. 需要注意的是,因为"eval" 捕获其他致命的错误, 它是有用的对于确定某个特性(比如 作为socket或者symlink) 是被实现。 如果你想要捕获错误 当加载一个XS模块, 一些2进制接口的问题(比如Perl 版本倾斜) 可能是致命的 甚至是"eval" 除非$ENV{PERL_DL_NONLAZY} 被设置 如果要执行的代码并没有不同, 你可能使用eval-BLOCK 从一个捕获运行错误的而不招致 每次重新编译的处罚 错误,如果有的话,仍旧返回在$@ # make divide-by-zero nonfatal 使被零除
eval { $answer = $a / $b; }; warn $@ if $@; # same thing, but less efficient
eval '$answer = $a / $b'; warn $@ if $@; # a compile-time error
eval { $answer = }; # WRONG # a run-time error
eval '$answer ='; # sets $@ [root@wx03 test]# cat a1.pl
eval { $answer = $a / $b; }; warn $@ if $@; [root@wx03 test]# perl a1.pl
Illegal division by zero at a1.pl line 1. 使用 "eval{}"的形式作为一个异常捕获器在libararies 有一些问题。 由于当前的说的破碎的状态(__DIE__) 你可能希望不要触发 any "__DIE__" hooks #一个私有的理财捕获 对于除以0 [root@wx03 test]# cat a2.pl
eval { local $SIG{'__DIE__'}; $answer = $a / $b; };
warn $@ if $@;
[root@wx03 test]# perl a2.pl
Illegal division by zero at a2.pl line 1. 这是非常重要的,给定的 "__DIE__" hooks 也被称为die, 这有可能改变它们的错误消息 [root@wx03 test]# cat a3.pl
# __DIE__ hooks may modify error messages
{
local $SIG{'__DIE__'} =
sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
eval { die "foo lives here" };
print $@ if $@; # prints "bar lives here"
}
[root@wx03 test]# perl a3.pl
bar lives here at a3.pl line 5.
perl eval的更多相关文章
- perl eval函数
29.2.32 eval • eval BLOCK • eval EXPR • eval eval 关键字在Perl 里起两种不同的但相关的作用.这些目的是用两种形式的语法 来表现的, eval BL ...
- perl 之eval
eval是个表达式,语句末尾有一个分号, 发现在它的监视范围内出现致命错误,会立即停止运行整个块,退出后继续运行其 余的代码 eval的返回值就是语句块最后一条表达式的执行结果 eval非正常 ...
- 精通Perl(第2版)
精通Perl(第2版)(通往Perl大师之路必读经典书籍,体现了一种编程思维,能够帮你解决很多实际的问题) [美]brian d foy(布瑞恩·D·福瓦)著 王兴宇 刘宸宇 译 ISBN 978 ...
- 通过远程 http API 来控制 lnmp 环境的重启perl脚本
#!/usr/bin/perl use DBD::mysql; use strict; use warnings; use DBI; use utf8; binmode(STDOUT, ':encod ...
- 使用DBI(perl)实现文本文件的导入导出mysql
DBI 是perl脚本连接数据库的一个模块.perl脚本相对shell更灵活,功能更强大,跨平台能力强.相对可执行jar包要简单很多. 1.下载安装包DBI-1.631.tar.gzperl脚本下载 ...
- 使用perl实现scp批量分发
perl模块Net::SCP::Expect批量下发文件 用Net::SSH::Perl和Net::SCP::Expect写部署脚本 scp分发文件的perl脚本 Perl SCP操作 #!/usr/ ...
- 这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script
这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4378224.html ...
- perl脚本基础总结
1. 单引号字符串中的\n不会被当做换行符处理. 如:'\'\\' --> '\ . 2. 双引号 字符串联 "Hello"."World" ...
- Perl中的正则表达式
转自:http://c20031776.blog.163.com/blog/static/684716252013624383887/ Perl 程序中,正则表达式有三种存在形式 分别是 (1 模式匹 ...
随机推荐
- hdu4405概率dp入门
Aeroplane chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- javascript时间函数
//时间函数 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完 ...
- a='1,2,3,4,5'如何转换为['1','2','3','4','5']
a='1,2,3,4,5'如何转换为['1','2','3','4','5'] b=a.split(',') split函数自动将分隔后的元素以逗号为分隔符存放到列表中 用处:有时需要用户输入多个数字 ...
- iOS XMPP之常见错误一:(<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>)
在XMPP开发中,使用XMPPStream进行连接服务器后,验证过程中,比较常见的一个错误是 <failure xmlns="urn:ietf:params:xml:ns:xmpp-s ...
- Week5(10月10日):国庆之后,让我们整装期待元旦吧
Part I:提问 =========================== 1.要将“Hello, Admin",从控制器传递到视图,该如何操作? (1)使用ViewData (2)使用V ...
- 言未及之而言,谓之躁;言及之而不言,谓之隐;未见颜色而言,谓之瞽(gǔ)
前言 一个高效的团队离不开leader和组员之前,组员和组员之前的通力合作.而合作的基础便是彼此之间的商讨与协调,意见的统一,进而在达成共识的前提下行动.那么如何才能和组员达成共识呢? 和组员之间的沟 ...
- 一步一步重写 CodeIgniter 框架 (11) —— 使用 CodeIgniter 函数库
在完成了CI框架的类库扩展后,很自然我们就会想到函数库的扩展.函数库的扩展在 CI 中称为 helper 函数与类有不同的地方,它不能继承,只能覆盖或者添加新的函数,或者直接完全新定义的一组函数. 由 ...
- iOS 用GDataXMLNode创建和解析XML
原文地址:http://blog.csdn.net/gf771115/article/details/7718403 NSError *error; // NSString *path = [[ ...
- 【ant项目构建学习点滴】--(3)打包及运行jar文件
<?xml version="1.0" encoding="UTF-8"?> <project default="compile&q ...
- ZOJ 3603字符串操作
解题思路:找到公共子串然后升序输出 坑的地方就在于输入是存在相同字母的 #include <stdio.h> #include <algorithm> #include < ...