动脑的机会来了



QUOTE:
原帖由 life382 于 2007-9-25 17:03 发表
别寻我开心,,看情况都是意义都差不多,
两个是检测变量是否有值,一个是检测变量是否有定义,
为何找不到0呢。见鬼了……

试试perljoker在61楼写的程序吧
知道的,错了好几处,原来是没有测试。。懒啊
现在测试了,结果没有问题了
还有几处累赘啊,不恰当啊。。实在懒得改了
比如:chomp多余的,if用的也不恰当,还有,如果确定文件名,前3行可以省去,等等。。懒得该了
好bt哦。。貌似通过了……
赶快对比一下,两个正则表达式,为何有一个正则表达式的0是得不到的呢


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

你把 $2 设成 0 试试? 呵呵
还有说说最初的那个问题,涉及到编码。
我需要引入use Encode;
然后打开文件时,必须以utf16打开,这样处理信息才是对的
open(FN,"<:encoding(utf16)",$filename)||die $!;


QUOTE:
原帖由 life382 于 2007-9-25 17:08 发表
好bt哦。。貌似通过了……
赶快对比一下,两个正则表达式,为何有一个正则表达式的0是得不到的呢

我觉得啊,可能就是传说中的 RPWT  
try,,,,,,第一次的那个正则表达式读不到0的值,,,明白的人说下原因吧。
呵呵,真的不是偶不思考,是偶太懒了,将就用
$ab='0';
if defined $ab 为真,if $ab为假,就是这个意思
偶程序还有多处别扭的地方,偷懒所致
mm自己要注意罗
为发扬写程序时的认真态度,以及避免对人造成误解,以及回应cobrawgl兄指出的偶程序的bug
现更正如下:

[Copy to clipboard] [ - ]
CODE:
#! /usr/bin/perl -w
#        read.pl
use strict;        use warnings;
my $filename;
if (!($filename=$ARGV[0])) {$filename = "Log.html"}
open(FN,$filename)||die $!;
my ($proj,$conf,$err,$warn);
while(<FN>){
        if (/Project: (\w+), Configuration: (.*?)</){
                $proj="None" if !defined($proj=$1);
                $conf="None" if !defined($conf=$2);
                print "Project = ",$proj,"\nConfiguration = ",$conf,"\n";
        }
        if($proj && $_=~/$proj - (\d+) .*?(\d+)/){
                $err="None" if !defined($err=$1);
                $warn ="None" if !defined($warn=$2);
                print "error = ",$err,"\nwarning = ",$warn,"\n";
        }
}

这次比较简洁有效,大家再帮看看有没有毛病了
喜讯……
我找到问题的原因了,不是正则表达式的问题
所以第一次的那程序是正确的,,不能打印出0,是因为我程序有做了检测if($Errors)
而是在于if语句的写法,就像我刚才问的这三句有何区别
$proj=$1 if($1);
$Errors =$1 if defined $1;
$err=$1 if $1;

得出结论,好像变量如取0值时,if语句是不成立的