【发布时间】:2012-09-27 16:03:12
【问题描述】:
所以我正在上 Perl 编程课,我们的老师给了我们第一个作业,几乎没有谈论如何实际编程 perl。这正是我们老师分配的内容:
"你应该编写一个脚本(你可以为你认为合适的脚本命名),它接受 3 个文件名作为参数。第一个文件名对应于用 C++ 编写的程序源代码。第二个文件名对应于一个输入文件,即被列为第一个文件名的 C++ 程序使用。第三个文件名对应于一个文本文件,其中包含所讨论程序的预期正确输出。目录路径可以与任何文件名一起提供。
如果程序不需要输入文件,命令行的第二个参数应该是文件名“/dev/null”。
所有文件——程序源文件、输入文件和预期的输出文件——在脚本使用它们之前都应该复制到临时测试目录,这样原始文件被修改的可能性很小通过测试程序。如果暂存目录不存在,您的脚本应该创建一个作为当前工作目录的子目录。
然后您的脚本应该使用 GNU g++ 编译器编译和链接源代码的临时副本。然后脚本应该运行程序——将输出保存到临时文件中存储在临时测试目录中。
运行程序后,您的脚本应使用 UNIX 命令 diff 将上一步中生成的实际输出与预期的输出文件进行比较,并报告输出符合规范或报告 diff 报告的任何差异程序。
完成后,您的脚本应删除所有临时副本和暂存文件。不要删除原始程序、原始输入文件、原始预期输出文件或暂存目录本身。”
到目前为止我有这个:
#!/usr/bin/perl -w
use strict;
my ($line, $program, $input, $output);
print "Give the program, input, and standart output for testing. ";
$line = <>;
chomp $line;
($program, $input, $output) = split/\s+/, $line; # split/\s+/ is to separate spaces from the input
my($o_test) = $output + "_test";
print "$program ";
print "$input ";
print "$output ";
system("mkdir test_scratch") == 0
or die "failed to create test_scratch. exiting...."
system("cp $program, /test_scratch/"); # error
system("cp $input, /test_scratch/");
system("cp $output, /test_scratch/");
system("cd test_scratch");
system("g++ $program");
system("chmod +x a.out");
system("./a.out < $input > $o_test");
my($DIFF) = system("diff $output $o_test") # error
if[ $DIFF != ""]
print ("Output conforms to specifications."); # error
then
print ("$DIFF");
system("cd ..");
我在代码中的 # 处遇到错误。我什至不知道如何执行“/dev/null”。我花了很多时间在网上查找东西并搜索stackoverflow,但我只是不知道还能做什么。我意识到这是一个非常长的问题,但我不知道还能做什么。感谢您给我的任何帮助。
【问题讨论】:
-
你试过问你的老师吗?
-
我倾向于支持 choroba,这似乎是一个相当“穿越火线”类型的任务。除此之外,我希望你的教授比
system调用的大链更深入地研究 Perl 编程,Perl 比仅仅替代 BASH 脚本更有用。
标签: perl system-calls