将Win32 :: OLE :: Variant转换为perl变量?

时间:2011-08-11 16:23:27

标签: perl win32ole

当我从excel文件中提取文本时,它会显示为Win32::OLE::Variant=SCALAR(0x1214f94)。如何将其转换为Perl变量?当我尝试使用值函数时,只需打印@data = @{$dataHash{$header}};

my ($refs,$rows,$header) = &extract;

my %dataHash = %{$refs};
print "Keys:",keys %dataHash,"\n";
my @headers =  @{$header};

my @test = @{$dataHash{'Date'}};

foreach my $scalar (@test){
    print $scalar;
}

foreach my $header (@headers){
    print "Checking Header: $header\n";

    @data = @{$dataHash{$header}};

    print $data;
    foreach my $scalar (@data){
        print FH "$scalar\n";
    }
}

更新

我需要做的就是输入use Win32::OLE::VariantWin32::OLE::Variant=SCALAR(0x1214f94)成为可读答案。

2 个答案:

答案 0 :(得分:1)

作为一般规则,当您获得SCALAR(0x1214f94)之类的值时,您将打印引用/地址,而不是值。您可以通过在变量前添加美元符号来取消引用:

$a = \$b;
$b = 1;
print $a;   # prints something like SCALAR(0x1214f94)
print $$a;  # prints 1

答案 1 :(得分:1)

在这种情况下,你得到的是Win32::OLE::Variant对象,当需要比文本更复杂的类型时,它通常从OLE调用返回。请参阅链接页面中列出的方法,并选择适当的方式获取perl表示。

例如,当您在Variant对象中有一个日期时,您可以将其作为字符串获取:

my $string = $date->Date("yyyy-MM-dd");