当数据不正确地传递给子例程时,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