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 

モジュールOLEforPerlを使用しており、ワークシートから取得したすべての値を$ varと出力すると、期待値が取得されますが、すべてをハッシュに入れると、次のように出力されます。

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

などなど。私はここで本当に困惑しているので、ハッシュについて何かを理解してはいけません。

4

2 に答える 2

10

push @dates, $varOLE::Variantオブジェクトを@dates配列にプッシュしprint $var、暗黙のOLE::Variantメソッドを呼び出してオブジェクトを文字列に変換します。

@datesオブジェクト自体ではなく、基になる文字列値だけを含めたい場合は、次のように言います。

push @dates, "$var";

@datesこれは、日付オブジェクトを配列に入れる前に文字列化します。

于 2011-02-01T17:45:38.897 に答える
4

呼び出しによって返される値は$worksheet->Cells($row,$col)->{'Value'}、本質的にほとんどC / C ++であるオブジェクトであり、Perlには、メモリ位置(ダンプでは大きな整数として表示されます)で表されるオブジェクトのハンドルしかありません。基盤となるC/C ++ライブラリをラップする多くのCPANモジュールは同じように動作します(XML :: LibXMLは例として思い浮かびます)。簡単に言うと、これオブジェクトであり、残念ながらData::Dumperで表示できるのはこれだけです。それらは本質的に祝福されたスカラー参照であり、それらに対するすべての操作は、基になる参照自体の実際の値ではなく、メソッドを介して行われます。

于 2011-02-01T21:29:50.223 に答える