Преобразование Win32 :: OLE :: Variant в переменную perl? - PullRequest
0 голосов
/ 11 августа 2011

Когда я извлекаю текст из файла 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";
    }
}

UPDATE:

Все, что мне нужно было сделать, это ввести use Win32::OLE::Variant и Win32::OLE::Variant=SCALAR(0x1214f94) стал читабельным ответом.

Ответы [ 2 ]

1 голос
/ 11 августа 2011

В этом случае вы получаете Win32 :: OLE :: Variant объект, который часто возвращается из вызовов OLE, когда требуется более сложный тип, чем текст.Посмотрите методы, перечисленные на связанной странице, и выберите подходящий для получения представления perl.

Например, когда у вас есть дата в объекте Variant, вы можете получить ее в виде строки, подобной этой:

my $string = $date->Date("yyyy-MM-dd");
1 голос
/ 11 августа 2011

Как правило, когда вы получаете значение, например SCALAR(0x1214f94), вы печатаете ссылку / адрес, а не значение.Вы можете разыменовать, добавив знак доллара перед переменной:

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