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”来解决这个问题,但现在你正在重新加载模块,每次都会有关于重新定义的例程,性能问题以及可能重新初始化全局变量的警告.这不值得.