私は Perl プログラミングのクラスを取っていますが、先生は私たちに最初の課題を与え、実際に perl をプログラミングする方法についてはほとんど話しませんでした。これがまさに私たちの先生が割り当てたものです:
「引数として3つのファイル名を受け入れるスクリプトを作成する必要があります(スクリプトに適切と思われる名前を付けることができます)。最初のファイル名は、C ++で記述されたプログラムソースコードに対応します。2番目のファイル名は、使用される入力ファイルに対応します最初のファイル名としてリストされている C++ プログラムによって. 3 番目のファイル名は、問題のプログラムの予想される正しい出力を含むテキスト ファイルに対応します. ディレクトリ パスは、任意のファイル名で指定できます.
プログラムが入力ファイルを必要としない場合、コマンド ラインの 2 番目のパラメータはファイル名 "/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 を検索したりするのに多くの時間を費やしましたが、他に何をすべきかわかりません。これは非常に長い質問だと思いますが、他に何をすべきかわかりません。あなたが私に与えることができるどんな助けにも感謝します.