2011-02-01 10 views
6
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 

Estoy utilizando el OLE módulo para Perl y todos los valores que recibo de mi hoja de trabajo y de impresión $ var entonces consigo el valor esperado, pero cuando puse todo en una hash imprime:de Perl de datos :: Dumper muestra objetos en lugar de los valores

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

Y así sucesivamente. No debo entender algo sobre los hashes, porque estoy realmente perplejo aquí.

Respuesta

10

push @dates, $var empuja un objeto OLE::Variant en su conjunto @dates, mientras print $var llama al OLE::Variant método implícito para convertir el objeto en una cadena.

Si también desea @dates sólo contienen los valores de cadena subyacentes y no los propios objetos, dicen

push @dates, "$var"; 

que stringify el objeto de fecha antes de ponerlo en la matriz @dates.

+0

Pensé que era algo así de simple. ¡Gracias! – Melissa

3

Los valores devueltos por la llamada $worksheet->Cells($row,$col)->{'Value'} son objetos que son principalmente de naturaleza C/C++, y Perl solo tiene un identificador en el objeto, representado por una ubicación de memoria (que se ve en el volcado como un entero grande). Muchos módulos de CPAN que envuelven las bibliotecas C/C++ subyacentes se comportan de la misma manera (XML :: LibXML está en el ejemplo que se le viene a la mente). La respuesta corta es que este es el objeto, y es todo lo que puedes ver por medio de Data :: Dumper lamentablemente. Son referencias escalares esencialmente bendecidas, y todas las operaciones en ellas se realizan a través de métodos, no a través del valor real de la referencia subyacente en sí misma.

+0

+1 excelente explicación; no muy alto nivel, no muy bajo nivel – daxim

Cuestiones relacionadas