【发布时间】:2017-10-24 13:16:18
【问题描述】:
我正在使用 Data::Dumper 和 Data::Dumper::Simple(DD 和 DDS)以脚本的详细模式打印哈希,我希望能够与可能没有的其他人共享它这些模块已安装,所以我正在检查它们是否已加载。
如果不检查模块是否成功加载,我将如何加载和使用它们的 MWE 是:
use strict;
use warnings;
use Data::Dumper;
use Data::Dumper::Simple;
$Data::Dumper::Sortkeys = 1;
my %testHash=();
warn Dumper(\%testHash);
哪些打印:
$testHash = {};
使用here 描述的方法首先检查模块是否已加载,如果加载则仅使用 Dumper 方法,我将代码重写为:
use strict;
use warnings;
my $dumperLoaded = 1;
my $rc;
$rc = eval
{
require Data::Dumper;
Data::Dumper->import();
1;
};
if(!$rc)
{
print "Data::Dumper not found\n";
$dumperLoaded = 0;
}
$rc = eval
{
require Data::Dumper::Simple;
Data::Dumper::Simple->import();
1;
};
if(!$rc)
{
print "Data::Dumper::Simple not found\n";
$dumperLoaded = 0;
}
if($dumperLoaded){
$Data::Dumper::Sortkeys = 1;
}
my %testHash=();
if($dumperLoaded){
warn Dumper(\%testHash);
}
我现在的输出是:
Name "Data::Dumper::Sortkeys" used only once: possible typo at temp.pl line 51.
$VAR1 = {};
现在哈希转储不显示变量名称testHash,好像没有加载 DDS。但是,我的脚本并没有抱怨它无法加载 DDS。我可以通过注释掉 use Data::Dumper::Simple; 在我的第一个 MWE 中复制它。
我的问题:为什么我的脚本的第二个版本,带有模块加载检查,只打印 DD,而不是加载 DDS?
额外问题:在这样的条件模块加载场景中设置 SortKeys 的正确方法是什么?
谢谢。
【问题讨论】:
-
我在通过 require 加载
Data::Dumper::Simple时遇到问题(在 Windows 上)。所以似乎有些不同。你也不需要测试Data::Dumper,因为它是一个核心模块。
标签: perl perl-module data-dumper