【问题标题】:Perl's Data::Dumper shows objects instead of valuesPerl 的 Data::Dumper 显示对象而不是值
【发布时间】:2011-02-01 17:40:27
【问题描述】:
 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 

我正在使用用于 Perl 的模块 OLE 以及从工作表中获取的每个值并打印 $var 然后我得到预期值,但是当我将所有内容放入哈希中时,它会打印:

'first' => [
bless( do{\(my $o = 15375916)}, 'OLE::Variant'), 
bless( do{\(my $o = 15372208)}, 'OLE::Variant'),

等等。我一定不了解哈希,因为我真的很难过。

【问题讨论】:

    标签: perl hash ole data-dumper


    【解决方案1】:

    push @dates, $var 将一个OLE::Variant 对象推送到您的@dates 数组中,而print $var 调用隐式OLE::Variant 方法将对象转换为字符串。

    如果您还希望 @dates 只包含底层字符串值而不是对象本身,比如说

    push @dates, "$var";
    

    它将在将日期对象放入@dates 数组之前对其进行字符串化。

    【讨论】:

    • 我以为就是这么简单。谢谢!
    【解决方案2】:

    $worksheet->Cells($row,$col)->{'Value'} 调用返回的值是本质上主要是 C/C++ 的对象,而 Perl 只有一个对象的句柄,由一个内存位置表示(您在转储中看到一个大整数) .许多包装底层 C/C++ 库的 CPAN 模块的行为方式相同(XML::LibXML 就是一个例子)。简短的回答是,这 对象,不幸的是,您可以通过 Data::Dumper 看到它。它们本质上是有福的标量引用,对它们的所有操作都是通过方法,而不是通过底层引用本身的实际值。

    【讨论】:

    • +1 很好的解释;不要太高,不要太低
    猜你喜欢
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多