【问题标题】:Perl elsif statement isn't working in apache2 scriptPerl elsif 语句在 apache2 脚本中不起作用
【发布时间】:2016-09-26 09:04:21
【问题描述】:

所以我必须制作一个网站,在 apache 中使用 cgi 脚本创建其他网站。

我的 index.html 必须使用表单以便用户选择一个选项。

            <html>
            <head></head>
            <body>
            <h1>Welcome to Magnum system check</h1>

            <form action="/cgi-bin/main.pl" method="POST" target="_blank">
              <input type="radio" name="option" value="processes" checked> View my processes<br>
              <input type="radio" name="option" value="calendar"> View the calendar<br>
              <input type="radio" name="option" value="location"> View my location coordinates<br>
              <input type="radio" name="option" value="users"> View all users connected on my system<br>
              <input type="radio" name="option" value="file"> Find a file or directory<br>
              <input type="submit" value="Submit">
            </form>

            </body>
            </html>

这很好用。我用这段代码测试了 main.pl 以确保它接收到不同的值。

            #!/usr/bin/perl
            use CGI qw(:standard);
            my $option = param('option');

            print header;
            print start_html("Main test");
            print h2("your option was $option");
            print end_html;

它在新创建的 html 中打印了选定的值。现在,由于每个选项都必须做不同的事情,我决定为每个选项做一个 elsif。 (我尝试使用给定的命令,但它从未编译过)。

因此,以下代码的问题在于它仅适用于第一个选项(进程)。每当我选择另一个选项时,它默认为“不工作”。

            #!/usr/bin/perl
            use CGI qw(:standard);

            my $option = param('option');
            print "Content-type: text/html\n\n";

            if($option eq "processes") {
                   print "Processes";
            } elsif(@option eq "calendar") {
                   print "Calendar";
            } elsif(@option eq "location") {
                    print "Location";
            } elsif(@option eq "users") {
                    print "Users";
            } elsif(@option eq "file") {
                    print "File";
            } else {
                   print "Not working";
            }

知道为什么它不起作用吗?还是有更好的 elsif 替代品?

【问题讨论】:

  • 提示:@option$option 不同。第二个提示:use strict; use warnings;
  • 哇。我不敢相信我没有注意到这一点。谢谢!
  • 我们有时都不会注意到一些事情。 use strict; use warnings; 会帮助你注意事情。

标签: perl apache2 cgi


【解决方案1】:

正如@mob 在cmets 中指出的,将所有@option 更改为$option

if($option eq "processes") {
       print "Processes";
} elsif($option eq "calendar") {
       print "Calendar";
} elsif($option eq "location") {
        print "Location";
} elsif($option eq "users") {
        print "Users";
} elsif($option eq "file") {
        print "File";
} else {
       print "Not working";
}

如果你在脚本的顶部添加这个,Perl 会给你关于未定义变量的警告,这样你以后就可以避免这样的错误:

use strict;
use warnings;

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多