我是编程的初学者,这是我的第一语言。在我的课堂上,我们使用了一本稍微过时的书来学习(Book版权所有'02)。怀疑这会影响你帮助我,但值得注意。
问题
我不知道如何使用/结合数组来格式化简单的foreach语句。我混淆了,我的书没有提供例子。我试图得到它,以便在用户检查多个复选框时显示Uses / Primary_Uses。
#!/usr/bin/perl
#c04ex5.cgi - creates a dynamic Web page that acknowledges
#the receipt of a registration form
print "Content-type: text/html\n\n";
use CGI qw(:standard -debug);
use strict;
#declare variables
my ($name, $serial, $modnum, $sysletter, $primary_uses, $use, @primary_uses, @uses);
my @models = ("Laser JX", "Laser PL", "ColorPrint XL");
my @systems = ("Windows", "Macintosh", "UNIX");
my @primary_uses = ("Home", "Business", "Educational", "Other");
#assign input items to variables
$name = param('Name');
$serial = param('Serial');
$modnum = param('Model');
$sysletter = param('System');
@primary_uses = param('Use');
#create Web page
print "<HTML><HEAD><TITLE>Juniper Printers</TITLE></HEAD>\n";
print "<BODY><H2>\n";
print "Thank you , $name, for completing \n";
print "the registration form.<BR><BR>\n";
print "We have registered your Juniper $models[$modnum] printer, \n";
print "serial number $serial.\n";
print "You indicated that the printer will be used on the\n";
print "$systems[$sysletter] system. <BR>\n";
print "The primary uses for this printer will be the following:\n";
#The part I'm having trouble with.
foreach $use (@primary_uses) {
print "$use [@use]<BR>\n";
}
print "</H2></BODY></HTML>\n";
我对变量的命名可能有些偏差,我变得绝望,并确保我声明的比我应该多。
答案 0 :(得分:2)
如果您想打印一个简单的项目列表,您应该只使用$use
变量:
foreach $use (@primary_uses) {
print "$use<BR>\n";
}
请注意,这也将消除因未声明@use
而导致的致命错误。也许这对你来说也是一个混乱点。 $use
和@use
是两个完全不同的变量,尽管名称相同。
请注意,您可以非常轻松地使用CGI
模块打印列表:
my $cgi = CGI->new;
print $cgi->li(\@primary_uses);
输出列表html实体中插入的列表,如下所示:
<li>Home</li> <li>Business</li> <li>Educational</li> <li>Other</li>
其他一些指示:
请注意,最好在尽可能小的范围内声明变量
foreach my $use (@primary_uses) { # note the use of "my"
print "$use<BR>\n";
}
这也适用于其他变量。一个好主意是在初始化它们时声明它们正确:
my $name = param('Name');
然后,阅读代码的人不必在文件中向后扫描,以查看变量之前的位置。
请注意,您绝不应该首先使用网络表单中的数据内容而不首先进行清理,因为这会带来巨大的安全风险,尤其是在您打印时。它允许Web用户在您的系统上执行任意代码。
您应该知道for
和foreach
是同一功能的别名。
此外,您应该始终使用警告:
use warnings;
没有充分的理由不打开警告。
答案 1 :(得分:0)
foreach my $myuse (@primary_uses) {
print $myuse;
}
您需要声明变量。