2011-02-01 18 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 

Sto usando l'OLE modulo per Perl e ogni valore ricevo dal mio foglio di lavoro e di stampa $ var allora ottengo il valore atteso, ma quando ho messo tutto in un stampa hash:di Perl Data :: Dumper mostra gli oggetti invece di valori

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

E così via. Non devo capire qualcosa sugli hash, perché sono davvero bloccato qui.

risposta

10

push @dates, $var spinge un oggetto OLE::Variant sul proprio @dates matrice, mentre print $var chiama il metodo implicito OLE::Variant per convertire l'oggetto in una stringa.

Se anche voi volete @dates per contenere solo i valori di stringa sottostanti e non gli oggetti stessi, dicono

push @dates, "$var"; 

che stringa i l'oggetto data prima di metterlo nella matrice @dates.

+0

Ho pensato che fosse qualcosa di semplice. Grazie! – Melissa

3

I valori restituiti dalla chiamata $worksheet->Cells($row,$col)->{'Value'} sono oggetti che sono per lo più C/C++ in natura, e Perl ha solo una maniglia sul oggetto, rappresentato da una posizione di memoria (che si vede nella discarica come un grande numero intero). Molti moduli CPAN che avvolgono le librerie C/C++ sottostanti si comportano allo stesso modo (XML: LibXML è sull'esempio che viene in mente). La risposta breve è, questo è l'oggetto, ed è tutto ciò che si può vedere per Data :: Dumper sfortunatamente. Si tratta essenzialmente di riferimenti scalari benedetti e tutte le operazioni su di essi avvengono attraverso metodi, non attraverso il valore effettivo del riferimento stesso.

+0

+1 spiegazione eccellente; non troppo alto, non troppo basso – daxim

Problemi correlati