Chinaunix

标题: or 和 || 有区别吗 ? [打印本页]

作者: Pro_sky    时间: 2010-02-02 12:05
标题: or 和 || 有区别吗 ?
有什么比较大的区别不? 谢谢

我碰到了如下的情景:
  1. 1. open F, ">not_exist_file" or die($!);
复制代码
  1. 2 .open F, ">not_exist_file" || die($!);
复制代码
1成功了,2却不行,怎么回事呢?
作者: toniz    时间: 2010-02-02 12:11
本帖最后由 toniz 于 2010-02-02 12:33 编辑

回复 1# Pro_sky


    应该是没区别的。查查你报错是什么原因吧。

   不过赋值的时候,需要注意下符号的优先级。赋值的优先级比 || 低  比OR 高。
作者: infernor    时间: 2010-02-02 12:20
优先级
作者: dugu072_cu    时间: 2010-02-02 13:04
or 优先级低于 ,
|| 优先级高于 ,
因此:
open F, ">not_exist_file" or die($!); ===》 (open F, ">not_exist_file") or die($!);
而:
open F, ">not_exist_file" || die($!); ===》open F, ( ">not_exist_file" || die($!) );
作者: toniz    时间: 2010-02-02 16:13
回复 4# dugu072_cu

   查了下确实逗号的优先级刚好在两个中间。
    那就奇怪了  我用的时候居然没问题  我倒 !
  1. [etl@dmtest _xwj]$ cat a.txt
  2. yyy
  3. [etl@dmtest _xwj]$ cat ttt.pl
  4. use strict;
  5. open F, "<a.txt" || die($!);
  6. while(<F>){
  7.         print ;
  8. }
  9. [etl@dmtest _xwj]$ perl ttt.pl
  10. yyy
复制代码

作者: toniz    时间: 2010-02-02 16:22
回复 4# dugu072_cu


    我觉得这里的逗号应该是分割符,而不是逗号操作符。所以两句应该是一样的。
作者: yybmsrs    时间: 2010-02-02 16:34
  1. open FH, "not_exist_file" or die($!);
  2. while(<FH>)
  3. {
  4.         print ;       
  5. }
复制代码
无此文件或目录 at .//yy.pl line 22.
  1. open FH, "not_exist_file" || die($!);
  2. while(<FH>)
  3. {
  4.         print ;       
  5. }
复制代码
readline() on closed filehandle FH at .//yy.pl line 23.
作者: nfwolf    时间: 2010-02-02 16:36
open( F, ">not_exist_file") or die($!);
open(F, ">not_exist_file" )|| die($!);
结果在我这里是一致的,最好加个括号
作者: toniz    时间: 2010-02-02 16:39
回复 7# yybmsrs


    你在代码的同个目录下,新建一个名字叫“not_exist_file”的文件  随便填几行进去 再跑跑。
作者: yybmsrs    时间: 2010-02-02 16:41
回复 9# toniz


这种情况没有区别,都不会错。

但是读的话可以看出差别。
作者: toniz    时间: 2010-02-02 16:48
回复 10# yybmsrs


    你的意思是说,第一个的DIE执行了,第二个的DIE没有执行。是吧。
作者: yybmsrs    时间: 2010-02-02 16:49
回复 11# toniz


    恩
作者: toniz    时间: 2010-02-02 16:58
回复 12# yybmsrs


  哈 明白了  确实是优先级别的问题。
">not_exist_file" || die($!)  这样用,这句的后半句 die($!)  等于是废了。
所以文件存在的时候看不出啥问题。文件不存在的时候,一句会执行 die($!)  ,一句不会。

: Thanks All




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2