源过滤器是坏的并且不应该在生产代码中使用是"常识" .
在回答类似但更具体的问题时,我找不到任何好的参考资料,清楚地解释了为什么过滤器是坏的以及何时可以安全使用.我想现在是时候创造一个了.
我最近从CPAN安装了一个模块,并注意到它的一个依赖项是常见的:: sense,一个模块,它提供了你想要的所有警告,没有你不需要的.从模块的概要:
use common::sense;
# supposed to be the same, with much lower memory usage, as:
#
# use strict qw(vars subs);
# use feature qw(say state switch);
# no warnings;
# use warnings qw(FATAL closed threads internal debugging pack substr malloc
#                 unopened portable prototype inplace io pipe unpack regexp
#                 deprecated exiting glob digit printf utf8 layer
#                 reserved parenthesis taint closure semicolon);
# no warnings qw(exec newline);
除了undef警告有时候很麻烦,我通常会发现标准警告是好的.是否值得转换common::sense而不是我的正常use strict; use …
我之前对字符编码问题只有模糊的认识,但今天回答一个问题让我思考它.以下提供了更多值得思考的东西:
perlunifaq - Perl Unicode常见问题解答
绝对最低每个软件开发人员绝对必须知道Unicode和字符集(没有借口!)
我所看到的唯一提到将use utf8;源代码的字符编码(例如我们大多数人)称为"最佳实践"的地方就是前面提到的问题的答案.
此外,perlunitut提到我们应该use Encode qw{encode decode};在Perl程序中的"标准标题"中.因此,似乎另一个"最佳实践"应该是解码所有输入并对所有输出进行编码.
你怎么看?
我有一个Perl脚本(独立程序),它包含一些我想在其他脚本中重用的子程序.由于执行环境的限制,我无法将函数移动到公共.pm文件.
是否有可能区分脚本是否运行作为一个独立的程序,或者是require编/ do由另一个脚本编?
我唯一能找到的就是caller在顶层使用:当requireed caller显示谁加载了模块时,独立程序没有任何调用者.有没有更好的解决方案?
如何在Perl中编写测试以查看我的文件是直接运行还是从其他来源导入?我想这样做可以很容易地将所有内容捆绑在一个文件中,但仍然可以针对这些函数编写单元测试.我的想法是有这样的事情:
if (running_directly()) {
  main();
}
def main {
  this();
  that();
}
def this {
  # ...
}
def that {
  # ...
}
然后在一个单独的perl脚本中,我可以加载原始文件并调用它作为单元测试.
我记得以前见过这个,但我不记得怎么做了.我想避免针对某个已知值测试$ 0,因为这意味着用户无法重命名脚本.