免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: life382

动脑的机会来了 [复制链接]

论坛徽章:
0
发表于 2007-09-25 17:04 |显示全部楼层
原帖由 life382 于 2007-9-25 17:03 发表
别寻我开心,,看情况都是意义都差不多,
两个是检测变量是否有值,一个是检测变量是否有定义,
为何找不到0呢。见鬼了……

试试perljoker在61楼写的程序吧

论坛徽章:
0
发表于 2007-09-25 17:07 |显示全部楼层

回复 #80 cobrawgl 的帖子

知道的,错了好几处,原来是没有测试。。懒啊
现在测试了,结果没有问题了
还有几处累赘啊,不恰当啊。。实在懒得改了
比如:chomp多余的,if用的也不恰当,还有,如果确定文件名,前3行可以省去,等等。。懒得该了

论坛徽章:
0
发表于 2007-09-25 17:08 |显示全部楼层
好bt哦。。貌似通过了……
赶快对比一下,两个正则表达式,为何有一个正则表达式的0是得不到的呢

论坛徽章:
0
发表于 2007-09-25 17:08 |显示全部楼层
原帖由 perljoker 于 2007-9-25 17:07 发表
知道的,错了好几处,原来是没有测试。。懒啊
现在测试了,结果没有问题了
还有几处累赘啊,不恰当啊。。实在懒得改了
比如:chomp多余的,if用的也不恰当,还有,如果确定文件名,前3行可以省去,等等。。懒 ...



你把 $2 设成 0 试试? 呵呵

论坛徽章:
0
发表于 2007-09-25 17:10 |显示全部楼层
还有说说最初的那个问题,涉及到编码。
我需要引入use Encode;
然后打开文件时,必须以utf16打开,这样处理信息才是对的
open(FN,"<:encoding(utf16)",$filename)||die $!;

论坛徽章:
0
发表于 2007-09-25 17:10 |显示全部楼层
原帖由 life382 于 2007-9-25 17:08 发表
好bt哦。。貌似通过了……
赶快对比一下,两个正则表达式,为何有一个正则表达式的0是得不到的呢


我觉得啊,可能就是传说中的 RPWT  

论坛徽章:
0
发表于 2007-09-25 17:11 |显示全部楼层
try,,,,,,第一次的那个正则表达式读不到0的值,,,明白的人说下原因吧。

论坛徽章:
0
发表于 2007-09-25 17:12 |显示全部楼层

回复 #84 cobrawgl 的帖子

呵呵,真的不是偶不思考,是偶太懒了,将就用
$ab='0';
if defined $ab 为真,if $ab为假,就是这个意思
偶程序还有多处别扭的地方,偷懒所致
mm自己要注意罗

论坛徽章:
0
发表于 2007-09-25 17:27 |显示全部楼层
为发扬写程序时的认真态度,以及避免对人造成误解,以及回应cobrawgl兄指出的偶程序的bug
现更正如下:
  1. #! /usr/bin/perl -w
  2. #        read.pl
  3. use strict;        use warnings;
  4. my $filename;
  5. if (!($filename=$ARGV[0])) {$filename = "Log.html"}
  6. open(FN,$filename)||die $!;
  7. my ($proj,$conf,$err,$warn);
  8. while(<FN>){
  9.         if (/Project: (\w+), Configuration: (.*?)</){
  10.                 $proj="None" if !defined($proj=$1);
  11.                 $conf="None" if !defined($conf=$2);
  12.                 print "Project = ",$proj,"\nConfiguration = ",$conf,"\n";
  13.         }
  14.         if($proj && $_=~/$proj - (\d+) .*?(\d+)/){
  15.                 $err="None" if !defined($err=$1);
  16.                 $warn ="None" if !defined($warn=$2);
  17.                 print "error = ",$err,"\nwarning = ",$warn,"\n";
  18.         }
  19. }
复制代码

这次比较简洁有效,大家再帮看看有没有毛病了

论坛徽章:
0
发表于 2007-09-25 17:28 |显示全部楼层
喜讯……
我找到问题的原因了,不是正则表达式的问题
所以第一次的那程序是正确的,,不能打印出0,是因为我程序有做了检测if($Errors)
而是在于if语句的写法,就像我刚才问的这三句有何区别
$proj=$1 if($1);
$Errors =$1 if defined $1;
$err=$1 if $1;

得出结论,好像变量如取0值时,if语句是不成立的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP