Perl的Data :: Dumper显示对象而不是值

时间:2011-02-01 17:40:28

标签: perl hash ole data-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 

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

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

等等。我一定不明白哈希的事情,因为我真的很难过。

2 个答案:

答案 0 :(得分:10)

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

如果您还希望@dates只包含基础字符串值而不包含对象本身,请说

push @dates, "$var";

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

答案 1 :(得分:4)

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