【发布时间】:2018-07-04 21:01:50
【问题描述】:
我是 Perl 的新手(我也会说一般的编程),我正在尝试用我为学校作业做的 perl 脚本解决一个简单的问题。我不应该使用任何模块,我认为他们不会接受它,因为我必须先学会如何做事。
我被要求创建一个 html 输入表单来输入学生的姓名和分数,并将它们传递给我的 perl 脚本并计算每个学生的 GPA,到目前为止一切正常。
然后我应该将这些信息保存在哈希中,并获取 GPA 最高的学生姓名,然后是最低的学生姓名,但没有任何效果。
首先,我在任何函数之外定义了每个 GPA,以便我的每个子例程都可以读取,然后我尝试为每个学生指定他的 GPA,但我不确定我这样做是否正确。
my $cgi = CGI -> new();
my @name = $cgi->param('name');
my $gpa_one;
my $gpa_two;
my $gpa_three;
my $gpa_four;
my $gpa_five;
my $gpa_six;
my $gpa_seven;
my $gpa_eight;
my $gpa_nine;
my $gpa_ten;
my %stud_gpa = (
$name[0] => $gpa_one,
$name[1] => $gpa_two,
$name[2] => $gpa_three,
$name[3] => $gpa_four,
$name[4] => $gpa_five,
$name[5] => $gpa_six,
$name[6] => $gpa_seven,
$name[7] => $gpa_eight,
$name[8] => $gpa_nine,
$name[9] => $gpa_ten,
);
每个 GPA 都是子程序的结果。
我一直在尝试以多种方式对 GPA 进行排序(对哈希进行排序,只是尝试将它们中的每一个分配给一个简单的数组并对数组进行排序),但我无法让它发挥作用。
这是我尝试对哈希执行的子例程:
sub gpa_hash{
my @gpavalues = sort { $stud_gpa{$a} <=> $stud_gpa{$b} } keys %stud_gpa;
my $highest = $gpavalues[-1];
my $smallest = $gpavalues[0];
print "the max GPA is $highest of the student $stud_gpa{$gpavalues[-1]}<br>";
print "the min GPA is $smallest of the student $stud_gpa{$gpavalues[0]}<br>";
}
但我的输出有些问题,因为这是我得到的:
the max GPA is of the student
the min GPA is of the student
然后我尝试了一个数组,看看它是否更容易理解:
my @tot_gpa = (
\$gpa_one,
\$gpa_two,
\$gpa_three,
\$gpa_four,
\$gpa_five,
\$gpa_six,
\$gpa_seven,
\$gpa_eight,
\$gpa_nine,
\$gpa_ten
);
sub gpa{
my $max = (sort { $a <=> $b } @tot_gpa)[-1];
my $min = (sort { $a <=> $b } @tot_gpa)[0];
print "this is the smallest GPA: $min<br>";
print "this is the highest GPA: $max<br>";
}
但这就是我得到的:
this is the smallest GPA: SCALAR(0x8bcab0)
this is the highest GPA: SCALAR(0x8bcbd0)
我确定我首先在将变量分配给数组时做错了,因为如果我只是打印数组本身,它会给我这个输出:
SCALAR(0x8bcab0)
SCALAR(0x8bcad0)
SCALAR(0x8bcaf0)
SCALAR(0x8bcb10)
SCALAR(0x8bcb30)
SCALAR(0x8bcb50)
SCALAR(0x8bcb70)
SCALAR(0x8bcb90)
SCALAR(0x8bcbb0)
SCALAR(0x8bcbd0)
如果我只打印 GPA 变量,我会得到正确的对应数字,就像 print "$gpa_one<br>"; 给了我(例如)2.1。有人可以帮助我了解如何解决它吗?我要疯了……
谢谢!
【问题讨论】:
-
是的,我也在使用
use warnings;和use strict;,但它并没有给我任何错误,可能是因为语法似乎正确.. 我只是使用了$gpa_one和所有其他的值在他们自己的子程序中给他们结果,就像这样$gpa_one = $sum/$average所以如果我只打印$gpa_one它可以工作,它给了我输入表格的正确gpa,但问题是当我通过它时在数组或哈希内 -
您的声明
my @name = $cgi->param('name')将name字符串放入$name[0]。其余的元素,$name[1]之后,仍然未定义,您可能会收到关于 Use of uninitialized value 的警告。