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

Tôi đang sử dụng mô-đun OLE cho Perl và mọi giá trị tôi nhận được từ trang tính và in $ var sau đó tôi nhận được giá trị mong đợi, nhưng khi tôi đặt mọi thứ vào mã băm được in:Dữ liệu của Perl :: Dumper hiển thị các đối tượng thay vì giá trị

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

Và cứ như vậy. Tôi không hiểu gì về băm, bởi vì tôi thực sự bối rối ở đây.

Trả lời

10

push @dates, $var đẩy một đối tượng OLE::Variant vào @dates mảng của bạn, trong khi print $var gọi ngầm OLE::Variant phương pháp để chuyển đổi đối tượng thành một chuỗi.

Nếu bạn cũng muốn @dates chỉ chứa các giá trị chuỗi cơ bản và không phải là đối tượng chính mình, nói

push @dates, "$var"; 

mà sẽ stringify đối tượng ngày trước khi đưa nó vào mảng @dates.

+0

Tôi nghĩ nó đơn giản như thế. Cảm ơn! – Melissa

3

Các giá trị được trả về bởi cuộc gọi $worksheet->Cells($row,$col)->{'Value'} là các đối tượng chủ yếu là C/C++ và Perl chỉ có một tay cầm trên đối tượng, được biểu thị bằng vị trí bộ nhớ (mà bạn thấy trong kết xuất dưới dạng số nguyên lớn). Nhiều mô-đun CPAN bao bọc các thư viện C/C++ cơ bản hoạt động theo cùng một cách (XML :: LibXML là ví dụ bật lên trong tâm trí). Câu trả lời ngắn gọn là, này là đối tượng và đó là tất cả những gì bạn có thể xem bằng phương tiện Dữ liệu :: Rất tiếc là Dumper. Chúng là các tham chiếu vô hướng may mắn về cơ bản, và tất cả các hoạt động trên chúng đều thông qua các phương thức, chứ không phải thông qua giá trị thực tế của tham chiếu cơ bản.

+0

+1 giải thích tuyệt vời; không quá cao cấp, không quá thấp – daxim

Các vấn đề liên quan