【发布时间】:2009-10-22 22:14:28
【问题描述】:
我想在执行下一步之前验证一个条件,但只发出警告并跳过当前值而不是死掉。
如何重写 validate_me() 子程序而不返回任何值?
(更新) 请注意,以下代码按预期工作,只是我想要其他东西,而不是从 validate_me() 返回 1 或 0,这仍然允许代码表现相同。
foreach my $file ( @files ) {
validate_me($foo, $bar, $baz) or next;
do_something();
}
sub validate_me {
my ($foo, $bar) = @_;
if ( $foo > $bar ) {
carp("Something goes awol");
return 0;
}
if ( $bar != $baz ) {
carp("Odd");
return 0;
}
return 1; # success
}
谢谢。
【问题讨论】:
-
您为什么不想以标准方式表明您的验证程序是否成功?您可能会返回 undef 为 false,或者绝对是一个空字符串;您可以返回 2 或 100 或 -1 或类似 0E0 之类的奇怪值,它为零但不为真。但是为什么不以理智的方式去做——就像你当前的代码一样?
-
我被 Paul Fenwick 的主题“克林贡编程的艺术”感染了,通常情况下,最好从子例程中终止/警告,而不是返回要检查的值。也许在我的上下文中这不是合适的技术。
-
你的子程序是警告,当它返回 0 时。你说你不想让它死(它不会)你不想要一个返回值,但是删除返回语句会破坏代码 => 你想要什么
标签: perl