1

可能重复:
什么是有效的 Perl 模块返回值?

一般我们1;在模块末尾使用。这是为了表明模块返回true并且可以正确导入。现在如果我们返回mean ,这0意味着false模块导入失败。

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

  • -1;
  • some text;
  • 或者abc;

表示-1错误,并且some text,abc表示true

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

它回来了undef吗?

4

3 回答 3

4

任何真值都表示成功。-1 是一个真值。

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

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

package foo;
our @x;
sub bar { }

如果@foo::x 为空则失败,否则成功。

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

于 2013-01-14T07:27:15.117 回答
2

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

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

  • -1是真的,所以这是可以接受的。
  • some text是等效于 的间接方法调用text->some()
    • text->some()(和等价的)当且仅当该方法返回一个真值时是可接受的。为了安全起见,我会跟进一个真正的常量。
  • abc是等效于 的子例程调用abc(),或等效于 的字符串文字'abc'
    • abc()(和等价的)当且仅当子例程返回真值时是可接受的。为了安全起见,我会跟进一个真正的常量。
    • 'abc'(和等价的)是真的,所以这是可以接受的。

如果有错误,die则改为。但是,如果合理的话,即使这样也应该避免,因为如果有人捕捉到异常,它会使模块半加载(半执行)。

于 2013-01-14T07:43:37.723 回答
1

这些都是真的,模块将编译。但是,在更积极的诊断下,我看到编译器会发出关于 1 以外的值的警告。实际上这个“1;” 可以放在任何一条线上。我有时把它放在我正在调试的代码中间,只是为了有很好的调试断点行。

许多程序在较低的诊断级别上运行时不会出现问题,因为在最后一个表达式中意外地有各种真值,不一定是最后一行。

$a = "意外地让 -c 开心的真正价值。";

子你好{返回;}
于 2013-01-14T06:59:43.747 回答