gpt4 book ai didi

perl - 什么是有效的 Perl 模块返回值?

转载 作者:行者123 更新时间:2023-12-03 14:33:03 25 4
gpt4 key购买 nike

Perl 中的常见做法当然是以 1; 结束模块。这样就可以检查对 require 的调用是否成功。是否有任何理由返回值不能是另一个真实值?在我的测试中,它不会导致任何问题,但我想知道是否有人遇到任何问题(例如一些其他模块或编译指示或任何期望值实际为 1 而不仅仅是真的)。

编辑:根据流行的观点,因为它只会工作一次(好提示),所以代码示例已经消失了。似乎共识是返回任何真实值是安全的,但自 require 以来在调用代码中永远不要依赖该值。将返回 1第一次加载后

最佳答案

一段时间以来,我一直在模块的末尾放置一些愚蠢的东西。没有伤害,它是一个小小的复活节彩蛋。 uny2k有用地以 "Yes, this code is a joke." 结尾Class::Fields塞满了他们。

更进一步,有时当一个函数被记录为返回 truefalse我将为 true 返回 1 以外的值.这是为了惩罚写if foo() == 1的人当他们的意思是if foo() .这大约是我写 use constant TRUE => 1==1; use constant FALSE => !TRUE; 的同一时期

我已经看到生产代码中使用的模块的返回值。我不记得确切的原因。开发者的逻辑……被折磨了。我相信这类似于不想只写一行而不是两行。我不记得他为什么不直接导出。

这与使用 %_ 的开发人员相同传递参数(*_ 符号在包中是全局的)并在 map 语句中编写了 150 个 line map 语句。

除了混淆之外,使用返回值的危险在于它只能工作一次。

$ cat Foo.pm
package Foo;

return "Basset hounds got long ears";

$ cat test.plx
#!/usr/bin/perl -w

print require Foo, "\n";
print require Foo, "\n";

$ perl -I. test.plx
Basset hounds got long ears
1

第一次调用 require评估 Foo.pm 并返回返回值。第二次调用看到它已经在 %INC 中。并且只返回true。你甚至不能确定你是第一个需要代码的人。您可以通过 do "Foo.pm" 解决此问题但是现在您每次都重新加载模块,并带有有关重新定义的例程、性能问题以及可能重新初始化全局变量的警告。这不值得。

关于perl - 什么是有效的 Perl 模块返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1860869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com