获取并特别设置Perl模块的全局变量是否合适?

DVK*_*DVK 7 perl encapsulation coding-style perl-module

我想知道Perl的最佳实践是关于获取 - 或者更重要的是设置 - 某个模块的全局变量,通过直接访问$Module::varName以防模块没有为它提供getter/setter方法.

它闻起来不好的原因是它有点绕过封装.仅仅因为我可以在Perl中完成它,我不完全确定我应该(假设实际上有一个替代方法,比如在模块中添加一个getter/setter).

Mic*_*man 8

如果变量是公共API的一部分,则不会违反封装.(如果这不是另一回事.)

我认为直接访问更可取,因为它允许您利用动态范围:

local $Module::varName = 42;
Run Code Online (Sandbox Code Playgroud)

这使得与其他代码冲突的Module可能性降低.

  • @DVK如果记录在案,你可以使用它.如果没有,你可以使用它,但不能保证下一个版本它仍然存在或做它以前做过的事情.更糟糕的是,没有简单的说法.设置不存在的全局变量没有错误消息.如果您*必须*使用未记录的全局,如果没有其他方法可以使您的代码工作,请在您自己的测试套件中添加第三方模块的测试.确保无证件的全球存在并完成其工作. (4认同)
  • 同意,我总是做`local $ Data :: Dumper :: Maxlevels = 1;`. (2认同)