我想检查一个条件,打印一个警告,然后从一个子程序返回一行代码。这有效(我认为警告返回1):
return warn "can't find file" if not -f $input_file;
我可以安全地这样做吗?或者还有更好的方法吗?
答案 0 :(得分:8)
这是非常安全的,但它需要查看source来确定返回的值(true),并且没有留下可读的选项来控制返回的值。这是非常重要的,因为在这种情况下你通常想要返回/ undef / false,但你现在返回true。
以下所有备选方案都允许您指定返回的值:
warn("can't find file"), return if !-f $input_file;
(warn "can't find file"), return if !-f $input_file;
if (!-f $input_file) { warn "can't find file"; return }
-f $input_file or warn("can't find file"), return;
-f $input_file or (warn "can't find file"), return;
答案 1 :(得分:0)
return 0 * warn "can't find file" if not -f $input_file;
将返回0,因此无论调用该子例程如何,都将知道它失败了。
这是我的懒惰版本
if (!-f $input_file) { warn "can't find file"; return 0; }