Chinaunix
标题:
or 和 || 有区别吗 ?
[打印本页]
作者:
Pro_sky
时间:
2010-02-02 12:05
标题:
or 和 || 有区别吗 ?
有什么比较大的区别不? 谢谢
我碰到了如下的情景:
1. open F, ">not_exist_file" or die($!);
复制代码
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
查了下确实逗号的优先级刚好在两个中间。
那就奇怪了 我用的时候居然没问题 我倒 !
[etl@dmtest _xwj]$ cat a.txt
yyy
[etl@dmtest _xwj]$ cat ttt.pl
use strict;
open F, "<a.txt" || die($!);
while(<F>){
print ;
}
[etl@dmtest _xwj]$ perl ttt.pl
yyy
复制代码
作者:
toniz
时间:
2010-02-02 16:22
回复
4#
dugu072_cu
我觉得这里的逗号应该是分割符,而不是逗号操作符。所以两句应该是一样的。
作者:
yybmsrs
时间:
2010-02-02 16:34
open FH, "not_exist_file" or die($!);
while(<FH>)
{
print ;
}
复制代码
无此文件或目录 at .//yy.pl line 22.
open FH, "not_exist_file" || die($!);
while(<FH>)
{
print ;
}
复制代码
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