+ -
当前位置:首页 → 问答吧 → 我这个if else if 的嵌套结构对吗?为什么运行报错?

我这个if else if 的嵌套结构对吗?为什么运行报错?

时间:2010-10-19

来源:互联网

本帖最后由 ccc77 于 2010-10-19 11:38 编辑

#!/usr/bin/perl

$ia=$ca=$ib=$cb=$ic=$cc=0;
$bytesa=$seca=$bytesb=$secb=$bytesc=$secc=0;

open (FH,"ftp.log") or die("cannot open $! \n");
while ($line = <FH>){
      chomp($line);
      if($line =~ /abc.*OK.*UPLOAD.*Client.*, (\d+) bytes, ([0-9\.]+)Kbyte/){
              if($1 > 0 && $1 < 10000){
                       $ia+=1;
                       $bytesa+=$1;
                       $seca=$1/$2;
                       $ca+=$seca;
              }
              else if($1 > 10000 && $1 < 50000){
                       $ib+=1;
                       $bytesb+=$1;
                       $secb=$1/$2;
                       $cb+=$secb;
              }
              else{
                       $ic+=1;
                       $bytesc+=$1;
                       $secc=$1/$2;
                       $cc+=$secc;
              }
      }
}

     print "0 - 10000, count:",$ia,"avg speed:",$bytesa/$ca,"\n";
     print "10000 - 50000, count:",$ib,"avg speed:",$bytesb/$cb,"\n";
     print "50000 - , count:",$ic,"avg speed:",$bytesc/$cc,"\n";

close(FH);


运行总是报错:
syntax error at analyzeftplog.pl.bak line 16, near "else if"
syntax error at analyzeftplog.pl.bak line 29, near "}"
Execution of analyzeftplog.pl.bak aborted due to compilation errors.

麻烦帮忙看下。

作者: ccc77   发布时间: 2010-10-19

本帖最后由 zhlong8 于 2010-10-19 12:04 编辑

elsif  基本的语法问题啊。你这样用必须用 BLOCK 括起来

参见perldoc perlsyn
http://perldoc.perl.org/perlsyn.html

作者: zhlong8   发布时间: 2010-10-19

回复 zhlong8


    下面的语句可以用于控制 BLOCK 的条件和重复执行。(LABEL 部分是可选的。)


if (EXPR) BLOCK
if (EXPR) BLOCK else BLOCK
if (EXPR) BLOCK elsif (EXPR) BLOCK ...
if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK

作者: ccc77   发布时间: 2010-10-19

else if   elsif

作者: yybmsrs   发布时间: 2010-10-19

有什么问题吗?BLOCK一般是指 {} 包着的整体,if (cond) {consequence} else {alternative} 其中{}是不能像C一样省略的。你的用 else if 来写应该是

if($line =~ /abc.*OK.*UPLOAD.*Client.*, (\d+) bytes, ([0-9\.]+)Kbyte/){
    if($1 > 0 && $1 < 10000){
        $ia+=1;
        $bytesa+=$1;
        $seca=$1/$2;
        $ca+=$seca;
    }
    else {
        if($1 > 10000 && $1 < 50000){
            $ib+=1;
            $bytesb+=$1;
            $secb=$1/$2;
            $cb+=$secb;
        }
        else{
            $ic+=1;
            $bytesc+=$1;
            $secc=$1/$2;
            $cc+=$secc;
        }
    }
}

作者: zhlong8   发布时间: 2010-10-19