所以我正在上 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,但我只是不知道还能做什么。我意识到这是一个非常长的问题,但我不知道还能做什么。谢谢你能给我的任何帮助。