-2

假设这是 file.txt

Name:Lab1:Lab2:Lab3:Lab4:Lab5:Lab6:Exam1:Exam2:Final

Annette Adams :8:24:19:24:10:12:43:35:98
Mary Beard:9:30:19:23:10:14:29:39:87
Antoinette Brown:9:16:18:22:9:12:19:31:79
.
.
.

是否可以Perl编写带有一些选项的脚本,用户可以将这些选项传递给命令行并获得结果。

例如 getAverage.pl -l 3 file.txt打印 Lab3 Marks 的平均值。

如果可能的话,整个过程是什么?

4

2 回答 2

2

尝试http://perldoc.perl.org/Getopt/Long.html 从文档中:

Getopt::Long 模块实现了一个名为 GetOptions() 的扩展 getopt 函数。此函数遵循 POSIX 命令行选项语法,带有 GNU 扩展。一般来说,这意味着选项有长名称而不是单个字母,并以双破折号“--”引入。提供了对命令行选项捆绑的支持,就像更传统的单字母方法一样,默认情况下不启用。

有关在 Perl 中访问命令行选项的一般信息,请阅读perlvar文档: http: //perldoc.perl.org/perlvar.html#$ARGV

于 2012-10-17T06:04:47.610 回答
-1

我在 python 中组合了一个快速而肮脏的解决方案。应该很容易将其移植到 perl。

import sys
lines = open("file.txt",'r').readlines()
if len(sys.argv) > 2 and sys.argv[1] == "-l":
    try:
        number = int(sys.argv[2])
    except:
        print "Input a number after the -l switch."

    average = 0

    for i in lines:
        try:
            average += int(i.split(":")[number])
        except:
            pass

    average /= 3

    print "The average score for %s is %d" \
    %(lines[0].split(":")[number], average)

else:
    print "Computer says no."
于 2012-10-17T06:42:17.263 回答