(Perl)尝试使用简单数组编写foreach语句。对格式感到困惑

时间:2014-03-09 07:49:00

标签: arrays perl foreach

我是编程的初学者,这是我的第一语言。在我的课堂上,我们使用了一本稍微过时的书来学习(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";

我对变量的命名可能有些偏差,我变得绝望,并确保我声明的比我应该多。

2 个答案:

答案 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用户在您的系统上执行任意代码。

您应该知道forforeach是同一功能的别名。

此外,您应该始终使用警告:

use warnings;

没有充分的理由不打开警告。

答案 1 :(得分:0)

foreach my $myuse (@primary_uses) {
    print $myuse;
}

您需要声明变量。