Perl';s Data::Dumper显示对象而不是值

Perl';s Data::Dumper显示对象而不是值,perl,hash,ole,data-dumper,Perl,Hash,Ole,Data Dumper,我使用的是OLE for Perl模块,以及从工作表中获得的每个值,然后打印$var,然后得到期望值,但当我将所有内容放入哈希时,它会打印: foreach my $row (1..$end) { foreach my $col (3..27 ) { # skip empty cells next unless defined $worksheet->Cells($row,$col)->{'Value'}; # print

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

 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 

等等。我一定不懂一些散列,因为我真的被难住了

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

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

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

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

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

我认为这很简单。谢谢!+1精彩的解释;不要太高,也不要太低
push @dates, "$var";