请教一段perl代码

请教一段perl代码

以前没有学过perl,现在突然领导给一个任务,用mimedefang做sendmail的milter,对邮件组的发送权限进行控制,
昨天临时看了一下perl,在mimedefang-filter中加了一段代码,但是测试时,所有人都不能对all组发邮件了,
说明:我的思路是,先对收件人进行检查,如果收件人是all@rhel4.local,则再检查发件人是不是在文件all_allow内,如果不在就REJECT.
         如果收件人不是all@rhel4.local则直接放行。以是下代码:

[Copy to clipboard] [ - ]
CODE:
sub filter_recipient {
    use strict;
    my ($recipient, $sender, $ip, $hostname, $first, $helo,$rcpt_mailer, $rcpt_host, $rcpt_addr) = @_;
    if ($recipient =~ /^<?all\@rhel4\.local>?$/i) {
        open (FILE,'/etc/mail/all_allow') || die "Can't open file:$!\n";
        while ($line = <FILE>) {
                if ($line =~ /$sender/) {
                   return ('CONTINUE', "ok");
                    }
                return ('REJECT', 'Sorry; you are not allowed to mail to [email]all@rhel4.local[/email]');
                }
        }
    return ('CONTINUE', "ok");
}

各位表我诊断一下吧,由于现在急用,不能一从新学perl了

把笑脸去掉


QUOTE:
原帖由 churchmice 于 2008-5-28 13:22 发表
把笑脸去掉

谢谢回复,现在已经去掉了,帮我看看吧
我觉得这代码应该这样吧

[Copy to clipboard] [ - ]
CODE:
sub filter_recipient {
    use strict;
    my ($recipient, $sender, $ip, $hostname, $first, $helo,$rcpt_mailer, $rcpt_host, $rcpt_addr) = @_;
    if ($recipient =~ /^<?all\@rhel4\.local>?$/i) {
        open (FILE,'/etc/mail/all_allow') || die "Can't open file:$!\n";
        while ($line = <FILE>) {
                if ($line =~ /$sender/) {
                   return ('CONTINUE', "ok");
                    }
        }
return ('REJECT', 'Sorry; you are not allowed to mail to [email]all@rhel4.local[/email]');
}

照你那写法,唯一能够返回"continue ok"的情况就是/etc/mail/all_allow的第一行刚好匹配
还有返回值用1和0区分一下就可以了,然后再在主程序中加以判断