perl入门的一个小例子
2012-09-13 13:33
267 查看
今天看了perl书的第一章,感觉perl真是很丰富的语言,博大精深,要掌握的好,真不容易,不过好歹先看懂一个入门的这个小例子,我也是算是有一个好的开始,希望能透过对这门语言的学习,开启一个新的思路。
这个例子是从数据文件grades中读取信息,通过执行average.pl来计算出每个学生的平均成绩。 可以实际运行,没用过perl的可以玩一玩。
average.pl:
#!/usr/bin/perl // 指定perl程序的解释器存放位置
open(GRADES, "grades") or die "Can't open grades: $!\n"; //打开数据文件grades,得到一个文件句柄GRADES,如果不成功,执行die语句,退出程序,注意“or”的用法。
open(GRADES, "grades") and print "open grades successfully!\n";// 如果前一句执行成功,那么执行后一句print,注意“and”的用法。上面 这一句是我调试用的,用来练习 “or”和 “and”的真假判断。
while ($line = <GRADES>) { // 从文件句柄中读取一行数据, 注意如果是空白行也判断为真,所以对于此程序来说,文件中不能有空白行
($student, $grade) = split(" ", $line); //将该行数据以空格为分隔符,将两个数值分别存入标量$student和$grade中。
$grades{$student} .= $grade . " "; // grades是一个散列,以student为键值,将grade存入散列中,注意“.”的作用是给散列中的数值添加一个新的值,同时再添加一个空格,这个在C语言中是无法理解的。每个student可能会有多个grade,所以散列的数据结构适合存储一对多的关系。
print "$student: $grades{$student}\n";
}
foreach $student (sort keys %grades) { //将散列grades中的键值进行排序,并且遍历这些键值
$scores = 0;
$total = 0;
@temp_grades = split(" ", $grades{$student}); // 将键值student对应的所有grade取出来存入数组temp_grades中
foreach $temp_grade (@temp_grades) { //将数组中的grade进行累加
$total += $temp_grade;
$scores++;
}
$average = $total / $scores; // 计算出某个student的平均值。
print "$student: $grades{$student}\tAverage: $average\n"; // 打印出某个student的平均值。
}
~
grades:
Noël 25
Ben 76
Clementine 49
Norm 66
Chris 92
Doug 42
Carol 25
Ben 12
Clementine 0
Norm 66
~
这个例子是从数据文件grades中读取信息,通过执行average.pl来计算出每个学生的平均成绩。 可以实际运行,没用过perl的可以玩一玩。
average.pl:
#!/usr/bin/perl // 指定perl程序的解释器存放位置
open(GRADES, "grades") or die "Can't open grades: $!\n"; //打开数据文件grades,得到一个文件句柄GRADES,如果不成功,执行die语句,退出程序,注意“or”的用法。
open(GRADES, "grades") and print "open grades successfully!\n";// 如果前一句执行成功,那么执行后一句print,注意“and”的用法。上面 这一句是我调试用的,用来练习 “or”和 “and”的真假判断。
while ($line = <GRADES>) { // 从文件句柄中读取一行数据, 注意如果是空白行也判断为真,所以对于此程序来说,文件中不能有空白行
($student, $grade) = split(" ", $line); //将该行数据以空格为分隔符,将两个数值分别存入标量$student和$grade中。
$grades{$student} .= $grade . " "; // grades是一个散列,以student为键值,将grade存入散列中,注意“.”的作用是给散列中的数值添加一个新的值,同时再添加一个空格,这个在C语言中是无法理解的。每个student可能会有多个grade,所以散列的数据结构适合存储一对多的关系。
print "$student: $grades{$student}\n";
}
foreach $student (sort keys %grades) { //将散列grades中的键值进行排序,并且遍历这些键值
$scores = 0;
$total = 0;
@temp_grades = split(" ", $grades{$student}); // 将键值student对应的所有grade取出来存入数组temp_grades中
foreach $temp_grade (@temp_grades) { //将数组中的grade进行累加
$total += $temp_grade;
$scores++;
}
$average = $total / $scores; // 计算出某个student的平均值。
print "$student: $grades{$student}\tAverage: $average\n"; // 打印出某个student的平均值。
}
~
grades:
Noël 25
Ben 76
Clementine 49
Norm 66
Chris 92
Doug 42
Carol 25
Ben 12
Clementine 0
Norm 66
~
相关文章推荐
- SpringMVC笔记系列(1)——用一个例子帮你入门
- 一个perl例子,猜一下什么功能?
- WCF 一步一步从入门到精通(一)建立一个简单入门的例子(适合一点不会的朋友阅读)
- 一个非常好的理解遗传算法的例子 强烈推荐入门
- struts+hibernate+spring一个入门的实用例子(下)
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- scrapy入门的一个例子
- Epoll的一个例子[入门]【From mote_li Blog】
- log4cxx入门第一篇--一个小例子
- 一个经典的ADO.NET入门例子
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- WCF 一步一步从入门到精通(一)建立一个简单入门的例子(适合一点不会的朋友阅读)
- GDB不入门也使用的一个超简易例子
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- mybatis学习-入门(4)-一个完整的web例子,通过json将字符串传递给前台,然后显示出来
- makefile入门的一个简单例子
- junit3和junit4的一个入门例子程序
- Berkeley DB(一) -- 入门知识和一个小例子
- 一个设计性很强的入门插件开发例子
- 一个简单的例子入门Vue.js