1.3 一个班级的例子"grades" BACKWARDFORWARD


假设你对你所教班级的每个成员有一个分数集。你喜欢针对每个学生的全年级的一个综合表,并加上平均分。你有一个文本文件(名为"grades"), 如下:

Noe:1 25

Ben 76

Clementine 49

Norm 66

Chris 92

Doug 42

Carol 25

Ben 12

Clementine 0

Norm 66

amp;...

你使用下面程序收集所有的成绩, 确定每个同学的平均成绩, 并按字母顺序把他们打印出来。这个程序假设在你的班级没有两个Carols。即,如果有Carol的第二个输入, 程序认为这是第一个Carol的另一个成绩。

行号不是程序的一部份,就象BASIC的行号。

1: #!/usr/bin/perl

2:

3: open(GRADES, "grades") or die "Can't open grades $!";

4: while ($line = <GRADES>)

5: ($student, $grade) = split(/ /, $line);

6: $grades$student .= $grade . " ";

7:

8:

9: foreach $student (sort keys %grades)

10: $scores = 0;

11: $total = 0;

12: @grades = split(/ /,$grades$student);

13: foreach $grade (@grades)

14: $total += $grade;

15: $scores++;

16:

17: $aberage =$total / $scores;

18: print "$student: $grades$student: $aberage";

19:

在你看这个例子以前, 我们最好指出: 这个例子演示了许多我们到目前已讨论的问题, 加上我们现在将解释的。但是如果你注意,你能看到一些有趣的句型。让我们猜测将继续什么,如果你对了,然后我们再告诉你。我们将告诉你怎样运行这个程序。

1.3.1 怎样做

现在你可能想知道怎样运行一个Perl程序。简短的回答是:你把这个给Perl的解释器输入, 这个解释器恰好叫perl。较长的答案是这样:有多种进行运行的方法[1]。

引用perl的第一种方法(并且是在任何操作系统上可能工作的方法)是简单地从命令行显示调用perl。如果你在UNIX上, 并正做相当简单的事情, 你可以使用-e开关(在下例中的%表示一个shell命令, 所以不用打印它) :

%perl -e 'print "Hello, world!";'

在其他操作系统中, 你必须和引号一起使用。但基本的原则是一样的:你把Perl处理的事情放入80列左右[2]。   

对于较长的程序,你能使用文本编辑器把你的所有命令输入一个文件,然后假设你命名这个程序为“gradation”(不要和graduation混淆), 你最好说:

% perl gradation

你仍正在显示地引用Perl, 但至少你不必每次都把所有命令写在命令行。并且也不必使用引号以使shell高兴。

调用一个程序最方便的方法就是直接命名它(或click on it), 并让操作系统为你找到解释器。在某些系统,用一种特别应用联结各个文件或目录。在另一些系统中,为了联结Perl程序和Perl解释器, 你能做任何。在支持#!表示的UNIX系统中(现在多数UNIX系统都能做到), 你能使程序的第一行具有摩力, 所以操作系统将知道运行哪一个程序。把我们例子中的第一行写入你的程序中:

#!/usr/bin/perl

然后你所做的一切是

%gradation

当然, 这并不能工作, 因为你忘记使这个程序是可执行的(看man页中的chmod(1))[4], 并在你的PATH中。如果程序不在你的PATH中, 你必须提供一个完整的文件名,以便操作系统知道怎样发现你的程序。象这样

% ../bin/gradation 最后, 如果不幸你是在一种古老的UNIX系统上, 不支持#!行, 或者如果你解释器的路径长大于32个字符(在许多系统上的限制), 你可以这样:

#!/bin/sh -- # perl, to stop looping

eval 'exec /usr/bin/perl -S $0 $1+"$@"'

  if 0;

为处理/bin/csh, DCL, COMMAND.COM, 或任何缺省命令解释器, 许多操作系统对这个要求变量。问你的专家。

整个这本书中, 我们将只使用#!/usr/bin/perl表示所有这些, 你应明白我们的意思。

当你写一个检验程序时,不要称它为test。UNIX系统有一个test命令, 这个程序将代替你的程序而被执行。一定要起个别的名字。

当学习Perl时, 甚至你认为你知道你正在做什么以后, 我们建议使用-w选项, 特别在开发期间。这个选项将所有类型的有用和有趣的警告消息开关打开,不必按那个顺序。你能把-w开关放在第一行, 象这样:

#!/usr/bin/perl -w

既然你直知道怎样运行你自己的程序(不要和perl程序混淆), 让我们回到前面的例子。


Copyright: NPACT BACKWARDFORWARD