所以我必须建立一个网站,在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?
答案 0 :(得分:1)
正如@mob在评论中指出的那样,将所有@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;