这段代码哪里出问题了?【解决】

这段代码哪里出问题了?【解决】

新学perl,请教个问题!

open(AFILE,"afile") || die "open error";
my @afile=<AFILE>;
my $afile;
my $i;
foreach $afile (@afile){
    #print $afile;
    if( $afile ~ /aaa/){
        $i=1;
    }
    }elsif( $afile ~ /bbb/){
        $i=0;
    }
    if($i){
        print $afile;
    }
}
close(AFILE);

这段代码不能执行,请问错在哪里了?
这是错误信息:
[root@cache251-217 perl]# perl my.pl
syntax error at my.pl line 45, near "$afile ~"
syntax error at my.pl line 48, near "}"
Execution of my.pl aborted due to compilation errors.

~  ->  =~
#!/usr/bin/perl
use warnings;

open(AFILE,"afile") or die "can not open afile: $!\n";
while(<AFILE>) {
        print if /aaa/;
}
close(AFILE);


[Copy to clipboard] [ - ]
CODE:
open(AFILE,"afile") || die "open error";
my @afile=<AFILE>;
my $afile;
my $i;
foreach $afile (@afile){
    #print $afile;
    if( $afile ~ /aaa/){   #这里出错了,应该是 $afile =~ /aaa,原因看提示 syntax error at my.pl line 45, near "$afile ~"
        $i=1;
    }
    }elsif( $afile ~ /bbb/){  #同上
        $i=0;
    }
    if($i){
        print $afile;
    }
}
close(AFILE);



QUOTE:
原帖由 ly5066113 于 2008-1-18 18:22 发表
#!/usr/bin/perl
use warnings;

open(AFILE,"afile") or die "can not open afile: $!\n";
while() {
        print if /aaa/;
}
close(AFILE);

我的程序的意思是打印包含aaa和bbb的行以及其中的行,你的这个好像和我的结果有点出入!

多谢234楼几位的帮助,我的脚本写出来了:

[Copy to clipboard] [ - ]
CODE:
[root@rs2 perl]# more my.pl
#!/usr/bin/perl -w

use strict;
use warnings;
open(AFILE,"afile") || die "open error";
my @afile=<AFILE>;
my $afile;
my $i;
foreach $afile (@afile){
    #print $afile;
    if( $afile =~ /aaa/){
        $i=1;
    }elsif( $afile =~ /bbb/){
        print $afile;
        $i=0;
    }
    if($i){
        print $afile;
    }
}
close(AFILE);

但是总觉得这样写有点繁琐,哪位有好点的方法嘛?



QUOTE:
原帖由 linuxnextyear 于 2008-1-18 23:04 发表

我的程序的意思是打印包含aaa和bbb的行以及其中的行,你的这个好像和我的结果有点出入!

多谢234楼几位的帮助,我的脚本写出来了:

[root@rs2 perl]# more my.pl
#!/usr/bin/perl -w

use strict;
...

while(<FILE>)
{
    if(/aaa/../bbb/){
        print;
    }
}


QUOTE:
原帖由 shappen 于 2008-1-18 23:45 发表


while()
{
    if(/aaa/../bbb/){
        print;
    }
}

兄弟,你这个写法有些搞笑了!^_^


[Copy to clipboard] [ - ]
CODE:
while (<AFILE>) {
     print $_ if ($_ =~ /aaa/ || $_ =~ /bbb/);
}



QUOTE:
原帖由 mouse.rice 于 2008-1-21 15:48 发表

兄弟,你这个写法有些搞笑了!^_^

有什么问题么?这是最简洁的写法。
当然,这样会少几个字:
print if /aaa/../bbb/


QUOTE:
while(<FILE>)
{
    if(/aaa/../bbb/){
        print;
    }
}

这个不错