我正在使用Perl的Encode.pm模块,直接从CPAN下载(我已经更新到最新版本,2.84,它在RHEL上的Perl 5.10.1上运行).当我使用它时,它会发出有关Encode.pm的第111,115和172行的警告,如下所示:
Use of uninitialized value $name in concatenation (.) or string at /usr/lib64/perl5/Encode.pm line 186.
Run Code Online (Sandbox Code Playgroud)
这是相当令人沮丧的,因为警告似乎是关于Encode.pm中的某些内容而不是我的代码,我真的只想看到我的代码中的警告.我没有打开"-w"标志,但Encode.pm已use warnings在其内部启用.有没有办法隐藏模块的警告或以其他方式解决这种情况,而无需分叉Encode.pm?
我知道静音警告在某些方面可能是一个坏主意,但Encode.pm中的绝大多数警告使我很难在我寻求调试时发现我自己的代码生成的警告.它在Web服务器日志中也是不必要的混乱.
查看您在问题(https://metacpan.org/source/DANKOGAI/Encode-2.84/Encode.pm#L186)中复制的错误消息中引用的行,我们发现它$name直接来自提供给decode函数的参数.如果发出该警告,则是代码调用decode错误的直接结果.
根据Encode的文档,正确使用的decode是形式$string = decode(ENCODING, OCTETS[, CHECK]),具体示例如下$string = decode("iso-8859-1", $octets);.回到源代码,第一个参数进入$name- 它是使用的编码的名称$octets.
因此,警告告诉您代码中存在严重问题 - 您无法合理地期望通过尝试解码值而不指定其编码来获得有意义的结果.您需要在代码中解决这个非常现实的问题,而不仅仅是沉默它产生的警告.如果您需要帮助来修复您的呼叫decode,请更新您的问题以添加一个小的,可运行的脚本,它会产生警告,我们可以帮助您清理它.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |