Perl';s Data::Dumper显示对象而不是值
我使用的是OLE for Perl模块,以及从工作表中获得的每个值,然后打印$var,然后得到期望值,但当我将所有内容放入哈希时,它会打印: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
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";