在Perl中我需要分析一个巨大的哈希值,所以我使用Data::Dumper
模块将它打印到一个文件中.因为它是一个巨大的文件,所以很难阅读.有可能以某种方式Dumper
很好地打印输出,所以当我找到一个我正在寻找的字符串时,我将能够立即看到我正在寻找的字符串存储的关键结构吗?
目前我只使用一个简单的代码:
use Data::Dumper;
...
print Dumper $var;
Run Code Online (Sandbox Code Playgroud)
获得良好输出的最佳语法或替代方法是什么?
我有这个简单的Perl脚本:
#! /usr/bin/perl -w
use strict;
use Data::Dumper;
my %foo = ( 'abc' => 1 );
print Dumper(\%foo);
Run Code Online (Sandbox Code Playgroud)
它输出:
$VAR1 = {
'abc' => 1
};
Run Code Online (Sandbox Code Playgroud)
如何让它输出呢?
%foo = (
'abc' => 1
);
Run Code Online (Sandbox Code Playgroud) 我正在使用Data::Dumper
配置打印perl哈希,这将由另一个脚本进行评估.问题是它始终$VAR =
在输出开始时打印.我尝试将Varname
参数设置为空字符串,但后来我得到$1
而不是$VAR
.如何使用Dumper
?阻止打印变量名称?
my $params = {-PARAMS => 0} #data
local $Data::Dumper::Purity = 1;
local $Data::Dumper::Varname = "";
print Dumper($params) ;
Run Code Online (Sandbox Code Playgroud)
打印:
$1 = {
'-UPDATE' => 0,
}
Run Code Online (Sandbox Code Playgroud)
我希望有:
{
'-UPDATE' => 0,
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Data::Dumper::Dumper()
方法.输出很好,但可以做得小巧紧凑,外观更好看.
我怎么能控制它?有哪些更好的选择?
foreach my $row (1..$end)
{
foreach my $col (3..27 )
{
# skip empty cells
next unless defined
$worksheet->Cells($row,$col)->{'Value'};
# print out the contents of a cell
$var = $worksheet->Cells($row,$col)->{'Value'};
push @dates, $var;
print $var; #this prints the value just fine
}
}
my %hash;
$hash{'first'} = \@dates;
print Dumper \%hash; #This prints object information
Run Code Online (Sandbox Code Playgroud)
我使用模块OLE for Perl和我从工作表中获得的每个值并打印$ var然后我得到了预期的值,但是当我把所有内容放入哈希时它打印:
'first' => [
bless( do{\(my $o = 15375916)}, 'OLE::Variant'),
bless( do{\(my $o = 15372208)}, 'OLE::Variant'),
Run Code Online (Sandbox Code Playgroud)
等等.我一定不明白哈希的事情,因为我真的很难过.
我正在尝试显示使用其他公司的API获得的对象数组中的数据,但是当我尝试使用foreach循环时遇到错误.
我正在使用Dumper来显示数组中的所有内容.
print Dumper($object);
Run Code Online (Sandbox Code Playgroud)
自卸车的部分输出:
'enable_dha_thresholds' => 'false', 'members' => [ bless( { 'ipv4addr' => '192.168.1.67', 'name' => 'name.something.com' }, 'Something::Network::Member' ), bless( { 'ipv4addr' => '192.168.1.68', 'name' => 'name.something.com' }, 'Something::Network::Member' ) ], 'comment' => 'This is a comment',
我正在尝试提取似乎是双数组的"成员":
//this works
print $members->enable_dha_thresholds();
//this works
print $members[0][0]->ipv4addr;
//does not work
foreach my $member ($members[0]){
print "IP". $member->ipv4addr()."\n";
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:无法在./script.pl第12行的未填充引用上调用方法"ipv4addr".
我不确定我是否完全理解Perl中的"祝福"与"不完美",因为我不熟悉该语言.
我在Perl中有一个导出变量的结果,就像这个字符串:
$VAR1 = {
'guard' => undef,
'work_hand' => undef,
'images' =>
{'1' =>
{
'mini_height' => 150,
'width' => 150,
'extension' => 'jpg',
'filename' => 'object_1.1330907414.96873.jpg',
'mini_width' => 150,
'class' => 'Ontico::Image',
'height' => 150,
'mini_filename' => 'object_1.1330907414.96873.mini.jpg',
'size' => 26053,
'symname' => 'big_logo'
},
'2' =>
{
'width' => 48,
'extension' => 'jpg',
'alt' => '??????? ????????',
'height' => 48,
'mini_filename' => 'object_91.1235312905.mini.jpg',
'size' => 12809,
'symname' => 'logo',
'mini_height' => 150,
'filename' => 'object_91.1235312905.jpg',
'mini_width' => 150, …
Run Code Online (Sandbox Code Playgroud) 我在结构中有一些UTF-8编码的字符串,我倾向于使用Data :: Dumper进行调试.
一个小测试案例是:
use utf8;
use Data::Dumper;
say Dumper({??=>"??"}
Run Code Online (Sandbox Code Playgroud)
它输出
{
"\x{434}\x{430}" => "\x{43d}\x{435}"
};
Run Code Online (Sandbox Code Playgroud)
但我想看
{
"??" => "??"
};
Run Code Online (Sandbox Code Playgroud)
当然,我的结构非常复杂.如何在调试时使转储结构中的字符串可读?也许我必须以chr
某种方式处理输出warn/say
?
假设我使用Data::Dumper
以下行创建了一个文本文件:
my $x = [ { foo => 'bar', asdf => undef }, 0, -4, [ [] ] ];
Run Code Online (Sandbox Code Playgroud)
我想把这个文件读回来然后$x
回来.我试过这个:
my $vars;
{
undef $/;
$vars = <FILE>;
}
eval $vars;
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用 - $x
不仅没有定义,当我尝试使用它时,我得到一个警告
全局符号$ x需要显式包名称.
这样做的正确方法是什么?(是的,我知道它很难看.它是一个快速的实用程序脚本,而不是一个生命支持系统.)
我已经使用Data::Dumper
了很长时间.在谷歌搜索时,我发现了一个类似的模块Data::Dump
.
任何人都可以告诉我,他们提供的子程序之间的主要区别是什么?
data-dumper ×10
perl ×10
dump ×2
hash ×2
debugging ×1
ole ×1
persistence ×1
php ×1
unicode ×1
utf-8 ×1