0

当我从 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)成为一个可读的答案。

4

2 回答 2

1

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

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

my $string = $date->Date("yyyy-MM-dd");
于 2011-08-11T17:53:16.067 回答
1

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

$a = \$b;
$b = 1;
print $a;   # prints something like SCALAR(0x1214f94)
print $$a;  # prints 1
于 2011-08-11T16:36:01.397 回答