當數據不正確地傳遞給子例程時,Perl中的最佳實踐是什麼?如果子死亡或只是返回?Perl - 處理傳遞給子數據的無效數據的最佳實踐
這是我平時做
my @text = ('line 1', 'line 2');
print_text(\@text)
or die "ERROR: something went wrong in the sub";
sub print_text{
my ($aref_text) = @_;
return unless ref($aref_text) eq "ARRAY";
print "$_\n" for @{$aref_text};
return 1;
}
這裏,子剛返回如果傳遞的輸入是無效的,並預計呼叫者檢查錯誤,因爲它不會在這裏。我想知道在子級別「死亡」是否總是一個更好的做法。在大腳本中,我害怕這樣做,因爲我不想因爲一些簡單的子失敗而殺死整個腳本。
另一方面,我害怕只是返回,因爲如果調用者忘記檢查sub是否返回true,那麼腳本將繼續運行,並且可能會發生奇怪的事情。
感謝
@hanshenrik:我看不出有什麼幫助。 – Borodin
這應該是調試的一部分,並且我認爲它給編碼這種特定檢查帶來了錯誤的安全感。確保一個給定的參數是真的,比如說,一個數組引用僅涵蓋了可能出現的一小部分錯誤,如果你試圖以數組的形式解引用其他的東西,Perl會引發它自己的異常。到目前爲止,最常見的錯誤大都無法檢測到,例如,您的參考可能會引用具有舊數據的數組。 – Borodin
在沒有使整個運行無效的情況下發生代碼很少見,所以用有用的信息'死'會比讓程序繼續並提供不正確的結果更好。但是沒有任何類型檢查可以提供與最小的測試程序相同的保護。這就是爲什麼Java和C++的詳細和冗長的語法是基於一種誤解。 Perl對許多事情來說都是不應該臭名昭着的,但是即使只有非常基本的類型檢查,Perl也不是其中之一。 – Borodin