字符串形式:表达式计算

Vsftp:/root/perl/14# cat aa
9
5
1
2
Vsftp:/root/perl/14# cat a1.pl
open (A,aa); while ($line = <A>){
chomp $line;
$str .=$line; ##将所有的行连接起来
print "\$str is $str\n";
};
print "11111111\n";
eval $str;
Vsftp:/root/perl/14# perl a1.pl
$str is 9
$str is 95
$str is 951
$str is 9512
11111111 ##在$str 中放入一些代码
Vsftp:/root/perl/14# cat a2.pl
$str='$c=$a+$b';
$a=10;$b=20;
eval $str;
print $c;
print "\n";
Vsftp:/root/perl/14# perl a2.pl
30 Vsftp:/root/perl/14# cat a3.pl
eval ( 5 / 0 );
print $@;
print "\n"; Vsftp:/root/perl/14# perl a3.pl
Illegal division by zero at a3.pl line 1. Perl会将错误信息放入一个称做$@的变量中 代码块形式:例外处理 在这种形式下,eval 后面跟的是一个代码块,而不再是包含字符串的标量变量 Vsftp:/root/perl/14# cat a3.pl
eval { $a=10;
$b=0;
$c=$a/$b;
print "1111111111\n";
};
print $@;
print "\n"; Vsftp:/root/perl/14# perl a3.pl
Illegal division by zero at a3.pl line 3. Vsftp:/root/perl/14# 在编译脚本时,Perl 对代码块进行语法检查并生成编译代码,在遇到运行错误时, Perl 将跳过eval块中剩余的代码,并将$@设置为相应的错误信息。 /**********没有eval 和有eval的区别: Vsftp:/root/perl/14# cat a3.pl
{ $a=10;
$b=0;
$c=$a/$b;
print "1111111111\n";
};
print $@;
print "\n"; print "2222222222222222\n";
Vsftp:/root/perl/14# perl a3.pl
Illegal division by zero at a3.pl line 3. 此时程序直接中断,没有继续运行 Vsftp:/root/perl/14# cat a3.pl
eval { $a=10;
$b=0;
$c=$a/$b;
print "1111111111\n";
};
print $@;
print "\n"; print "2222222222222222\n";
Vsftp:/root/perl/14# perl a3.pl
Illegal division by zero at a3.pl line 3. 2222222222222222 加上eval后程序出错,但是下面代码继续运行 为了产生自己的错误,你需要使用die,Perl 知道某一段代码是否在eval 块中执行,因此, 当die 被调用时,Perl只是简单的将错误信息复制给全局变量$@,并跳转到紧跟eval块的语句继续执行。 Vsftp:/root/perl/14# cat a3.pl
eval { $a=10;
$b=0;
open (F,"xx22") ;
print "1111111111\n";
};
print $@;
print "\n"; print "2222222222222222\n";
Vsftp:/root/perl/14# perl a3.pl
1111111111 2222222222222222 Vsftp:/root/perl/14# cat a3.pl
eval { $a=10;
$b=0;
open (F,"xx22") or die "xx22 $! ";
print "1111111111\n";
};
print $@;
print "\n"; print "2222222222222222\n";
Vsftp:/root/perl/14# perl a3.pl
xx22 No such file or directory at a3.pl line 3. 2222222222222222 Java/C++ 程序员肯定认出了它们与throw,try 和catch 的相似之处 try 对应于eval块,catch 对应于$@检查,而throw 对应die

eval的更多相关文章

  1. JSON.parse 与 eval() 对于解析json的问题

    1.eval()与JSOn.parse的不同 eval() var c = 1; //全局变量 var jsonstr1 = '{"name":"a",&quo ...

  2. JSON.parse与eval的区别

    JSON.parse与eval和能将一个字符串解析成一个JSON对象,但还是有挺大区别. 测试代码 var A = "{ a: 1 , b : 'hello' }"; var B ...

  3. JS eval()函数的一些见解

    一.eval是基本使用规则 1 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 2 eval(string) 3 string必需.要计算的字符串,其中含有要计算的 ...

  4. Javascript动态执行JS(new Function与eval比较)

    new Function与eval可以动态执行JS,只要把拼接好的JS方法,然后以字符串的形式传入到这两个函数,可以执行,其中new Function用在模板引擎比较多. 用 Function 类直接 ...

  5. Python:eval的妙用和滥用

    时间 2014-07-08 13:05:24 CSDN博客 原文  http://blog.csdn.net/zhanh1218/article/details/37562167 主题 Python ...

  6. JSON中eval与parse的区别

    json的的解析方法 (非原创) json的解析方法共有两种:eval_r() 和 JSON.parse(),使用方法如下: var jsonData = '{"data1":&q ...

  7. eval解析JSON中的注意点

       在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery ...

  8. jQuery Ajax请求(关于火狐下SyntaxError: missing ] after element list ajax返回json,var json = eval("("+data+")"); 报错)

    $.ajax({    contentType: "application/x-www-form-urlencoded;charset=UTF-8" ,    type: &quo ...

  9. 被嫌弃的eval和with

    × 目录 [1]eval [2]with 前面的话 eval和with经常被嫌弃,好像它们的存在就是错误.在CSS中,表格被嫌弃,在网页中只是用表格来展示数据,而不是做布局,都可能被斥为不规范,矫枉过 ...

  10. Global eval. What are the options?

    David Flanagan最近写了一个关于全局eval的简单表达式,可以用一行式子表示: var geval = this.execScript || eval; 尽管看起来很简短,但是跨浏览器的兼 ...

随机推荐

  1. 某些手机一直连不上adb的解决办法

    首先看驱动,就是用各种手机助手连接,看是否能识别,如果能够成功进入连接模式,说明可用,注意勾选一直使用该台计算机进行调试,如果这一步不勾选在后面也是没有办法的. 第二个就是看端口占用的问题,adb n ...

  2. mvc Routing特性优化

    在mvc中,Url地址是利用routing特性来支持,但是这个Routing有个问题,多个不同的地址和指向同一个action方法, 例如: http://test.com (默认) http://te ...

  3. MVC中使用jquery的浏览器缓存问题

    jquery在浏览器ajax调用的时候,对缓存提供了很好的支持,POST方式不能被缓存,使用POST的原因,明确了数据不能被缓存,或者避免JSON攻击(JSON返回数据的时候可以被入侵) jquery ...

  4. Js5中基本类型

    分别是: Number,//数值 string,字符串 Boolean,//布尔 null,null类型 undefined//未定义 标准库提供了对 布尔 ,数值,字符串三种的构造函数封装 aler ...

  5. html-----010

    22 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  6. [转]:移动端H5页面高清多屏适配方案

    原文链接:http://www.tuicool.com/articles/YJviea 背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们 ...

  7. VMware Workstation不能启用虚拟设备floppy0由于灭有相应的有效设备在主机上. 你要尝试在每次打开虚拟机电源时连接此虚拟设备?

    编辑虚拟机的硬件,把软盘取消掉,floppy的提示就没有了

  8. Linux中的堡垒--iptables

    iptables的构成(四表五链)     表         filter:过滤数据包         nat :转换数据包的源或目标地址         mangle:用来mangle包,改变包的 ...

  9. vim 配置文件 ,高亮+自动缩进+行号+折叠+优化

    vim 配置文件 ,高亮+自动缩进+行号+折叠+优化 将一下代码copy到 用户目录下 新建文件为  .vimrc保存即可生效: 如果想所有用户生效 请修改 /etc/vimrc (建议先cp一份)& ...

  10. Expat Parser解析xml文件

    Expat 解析器是基于事件的解析器. 基于事件的解析器集中在 XML 文档的内容,而不是它们的结构.正因为如此,基于事件的解析器能够比基于树的解析器更快地访问数据. 请看下面的 XML 片段: &l ...