所以我參加了一個Perl編程課,我們的老師給了我們第一個任務,很少談論如何真正編程perl。這就是我們的老師分配的:Perl自動化文件測試
「你應該寫一個腳本(你可以命名你的腳本,只要你認爲合適),它接受3個文件名作爲參數,第一個文件名對應於用C++編寫的程序源代碼。 filename對應於C++程序要使用的輸入文件,第一個文件名列爲C++程序第三個文件名對應於一個文本文件,該文件包含所需程序的預期正確輸出可以提供目錄路徑的文件名。
如果程序不要求輸入文件,在命令行上的第二個參數應的文件名「的/ dev /空」。
所有文件 - 程序源文件,輸入文件和預期輸出文件 - 應在腳本使用它們之前複製到臨時測試目錄中,以避免原始文件被修改測試程序。如果暫存目錄不存在,您的腳本應該創建一個作爲當前工作目錄的子目錄。
然後,您的腳本應該使用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
我傾向於與科洛巴,這似乎是一個「通過他們進入火災」類型的任務。另外,我希望你的教授比大型系統調用更深入Perl編程,Perl比BASH腳本的替代更有用。 –