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

前端之家收集整理的这篇文章主要介绍了什么是有效的Perl模块返回值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Perl的常见做法当然是以1为单位结束模块;所以可以检查要求的呼叫是否成功.有没有理由返回值不可能是另一个真正的价值?在我的测试中,它没有看到任何问题,但是我想知道是否有任何人遇到任何问题(例如其他模块或编译指示或任何希望值为1而不是真的值) .

编辑:由流行的意见,由于它只会工作一次(好提示),代码示例已经消失.似乎一致的是,它可以安全地返回任何真正的价值,但从来没有依赖于该值调用代码,因为require将在第一次加载后返回1

解决方法

我一直把愚蠢的东西放在模块的最后一段时间.没有伤害和一点复活节彩蛋. uny2k以“是的,这段代码是个笑话”结尾. Class::Fields充满了他们.

更进一步,有时当一个函数被记录为返回true和false时,我将返回除1之外的值.这是为了惩罚写入foo()== 1的人,当他们的意思是如果foo().这是在同一时期我写的使用常数TRUE => 1 == 1;使用常数FALSE => !真正;

我看到生产代码中使用的模块的返回值.我不记得为什么.开发人员的逻辑是…折磨.我相信这是不希望只写一行而不是两行的.我不记得为什么他不出口它.

这是使用%_传递参数的同一开发人员(* _符号在包中是全局的),并在map语句内部写入150行地图语句.

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

$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

第一次调用要求评估Foo.pm并返回返回值.第二个调用看起来已经在%INC中,并且返回true.你甚至不能确定你是第一件需要代码的东西.你可以用“Foo.pm”来解决这个问题,但现在你正在重新加载模块,每次都会有关于重新定义的例程,性能问题以及可能重新初始化全局变量的警告.这不值得.

猜你在找的Perl相关文章