从perl模块返回-1

时间:2013-01-14 06:54:06

标签: perl package

  

可能重复:
  What are valid Perl module return values?

通常我们在模块的末尾使用1;。这表示模块返回true并且可以正确导入。现在,如果我们返回0表示false,则表示模块导入失败。

我的问题是,如果我在模块末尾使用(或返回)以下语句

,该怎么办?
  • -1;
  • some text;
  • abc;

-1表示错误,some textabc表示true

如果我不使用1;或任何语句(如上所述),那么在这种情况下模块会返回什么呢?

是否会返回undef

3 个答案:

答案 0 :(得分:4)

任何真实值表示成功。 -1是真值。

返回不必位于文件的末尾;它是最后一个可执行语句的返回值(也就是说,最后一个语句不仅仅是一个编译时的东西,比如package,use,no,sub,format)。

例如,要求包含以下内容的文件:

package foo;
our @x;
sub bar { }
如果@foo :: x为空,

将失败,否则成功。

如果确实没有可执行语句,则返回值为undef(false)。

答案 1 :(得分:2)

就像sub一样,模块返回的值是最后一个语句返回的值。我想如果文件是空的那就是undef。 (这绝对不是真正的价值。)

模块应始终返回一个真值(除零以外的任何值,空字符串或undef)。

  • -1是真的,所以这是可以接受的。
  • some texttext->some()的等效间接方法调用。
      当且仅当方法返回true值时,
    • text->some()(及等效)才可接受。我会跟进一个真正的常数来保证安全。
  • abc是一个等同于abc()的子程序调用,或者是等同于'abc'的字符串文字。
      当且仅当子例程返回真值时,
    • abc()(及等效)才可接受。我会跟进一个真正的常数来保证安全。
    • 'abc'(及等效)是真的,所以这是可以接受的。

如果出现错误,请改为die。但是,如果合理的话,应该避免这种情况,因为如果有人捕获异常,它会使模块半载(半执行)。

答案 2 :(得分:1)

这些都是正确的,模块将编译。然而,在更激进的诊断下,我看到编译器发出关于除1之外的值的警告。实际上这是“1;”可以放在任何一行。我有时把这些放在我调试的代码中间,只是为了得到很好的调试断点线。

由于在最后一个表达式中意外地具有各种真值,很多程序在较低的诊断级别运行没有问题,这些值不一定是最后一行。

$a = "True value to accidentally keep -c happy.";

sub hello { return; }