perl - Perl的新功能,大括号/语法问题

标签 perl syntax syntax-error

我最近开始用Perl编程(我将跳过长篇幅的内容),但是我偶然发现了一些似乎无法理解的错误:

syntax error at /usr/sbin/test.pl line 238, near ") {"
syntax error at /usr/sbin/test.pl line 247, near "} else"
syntax error at /usr/sbin/test.pl line 258, near ") {"
syntax error at /usr/sbin/test.pl line 276, near ") {"
syntax error at /usr/sbin/test.pl line 304, near "}"
syntax error at /usr/sbin/test.pl line 308, near "}"
syntax error at /usr/sbin/test.pl line 323, near "}"

似乎与if和else周围的括号有关

我在C,C#,Java,PHP,Lua和其他语言上都有经验,所以我有点被语法错误卡住了。

我粘贴了一个生成语法错误的代码示例:
            if (substr(ToString($buffer),0,4) == 'HELO') {
                $contype = 'smtp';

                send($client,'250 Welcome',0);

            } elsif (substr(ToString($buffer),0,4) == 'EHLO') { 
                $contype = 'esmtp';

                send($client,'250-$hostname Welcome',0);
                send($client,'250 SIZE $msgmaxsize',0);
            }

            do {
                recv($client,$buffer,1024,0);

            } while (ToString($buffer) != 'QUIT') {

                if (substr(ToString($buffer),0,10) == 'MAIL FROM:')
                {
                    $sender = ToString($buffer);
                    $sender =~ m/<(.*?)>/;

                    send($client,'250 OK',0);

                } else {
                    send($client,'503 I was expecting MAIL FROM',0);
                    send($client,'221 Bye',0);
                    break;
                } 

}

不幸的是我无法显示整个程序。

Perl版本5.10.1

最佳答案

除了使用==和!=(它们是数字比较运算符)而不是用eq和ne进行字符串比较的错误之外,在while测试之后,您还缺少了分号。也就是说,你有

do { ...; } while (...) { if (...) { ... } else {...}}

请注意,Perl和C一样,支持两种形式
while (expr) { stuff }


do { stuff } while (expr)

我想您打算使用后一种形式。

如果以上原因解决了第238行的错误,则在更正它时,第247行的错误可能会消失,如果它以某种方式引起了其他问题。但没有编译代码,我不太清楚如何做。

关于perl - Perl的新功能,大括号/语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293298/

相关文章:

模拟 RNA 合成的 Perl 程序

syntax - 是否有讨论或发布标准Markdown语法的官方组织?

ruby - 为什么 "true || File.exist? ' touch'"语法无效?

mysql - 使用 $email 进行验证会出现 mysql_syntax 错误

html - 使用 CGI 处理表单数据

linux - perl 的 Devel::ebug 如何

perl - 我怎样才能用 Perl 的能力给人们留下深刻印象?

stored-procedures - 为什么我们要编写 create/replace 来在 PL/SQL 中创建过程

scala - 元组的多重赋值是否比多重赋值语句慢?

c - "assignment makes integer from pointer without a cast -wint-conversion"