2010-05-01 8 views
9

Tôi mới làm quen với Perl và tôi có một vấn đề rất đơn giản nhưng tôi không thể tìm thấy câu trả lời khi tham khảo cuốn sách Perl của tôi.Làm cách nào để truy cập vào giá trị của một hàm băm Perl lồng nhau?

Khi in kết quả của

Dumper($request); 

tôi nhận được kết quả sau:

$VAR1 = bless({ 
      '_protocol' => 'HTTP/1.1', 
      '_content' => '', 
      '_uri' => bless(do{\(my $o = 'http://myawesomeserver.org:8081/counter/')}, 'URI::http'), 
      '_headers' => bless({ 
            'user-agent' => 'Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9.0.4) Gecko/20080528 Epiphany/2.22 Firefox/3.0', 
            'connection' => 'keep-alive', 
            'cache-control' => 'max-age=0', 
            'keep-alive' => '300', 
            'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
            'accept-language' => 'en-us,en;q=0.5', 
            'accept-encoding' => 'gzip,deflate', 
            'host' => 'localhost:8081', 
            'accept-charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7' 
            }, 'HTTP::Headers'), 
      '_method' => 'GET', 
      '_handle' => bless(\*Symbol::GEN0, 'FileHandle') 
      }, 'HTTP::Server::Simple::Dispatched::Request'); 

Làm thế nào tôi có thể truy cập các giá trị của '_method' ('GET') hoặc của 'máy chủ' ('localhost: 8081').

Tôi biết đó là một câu hỏi dễ, nhưng Perl hơi khó hiểu ngay từ đầu.

+0

Nếu bạn không chắc chắn cách sử dụng một đối tượng, bạn nên đọc tài liệu cho đối tượng bạn đang sử dụng * trước * đọc dữ liệu :: Dumper. Hãy chú ý đến câu trả lời của Axeman. – Ether

Trả lời

12

Narthring có quyền theo cách phương thức bạo lực. băm lồng nhau được giải quyết bằng cách kết nối các phím như sau:

$hash{top_key}{next_key}{another_key}; # for %hash 
# OR 
$hash_ref->{top_key}{next_key}{another_key}; # for refs. 

Tuy nhiên kể từ khi cả hai "băm" là may mắn đối tượng. Nó có thể giúp đọc lên trên HTTP::Server::Simple::Dispatched::Request, mà có thể cho bạn biết rằng đó là một đối tượng HTTP::Request và nhìn vào HTTP::Request phần trên headermethod phương pháp, nói với bạn rằng những điều sau đây làm các trick:

my $method = $request->method(); 
my $host = $request->header('host'); 

Thực sự, tôi khuyên bạn nên có được firefox search plugin called Perldoc Module::Name và khi bạn gặp đầu ra Dumper nói "chúc lành ... 'Một số :: Mô-đun :: Tên" "bạn chỉ có thể sao chép và dán vào plugin tìm kiếm và đọc tài liệu về CPAN.

+2

+1. Tôi thường muốn cấm sử dụng Data :: Dumper bởi người lập trình Perl mới bắt đầu, vì nó mở ra mọi đối tượng để mắt tò mò và dễ dàng tiếp cận đối tượng và lấy giá trị mong muốn từ băm thay vì * đọc tài liệu * và sử dụng các phương thức truy cập thích hợp. Bạn sẽ làm gì khi biểu diễn trường thay đổi trong bản sửa đổi tiếp theo? Đó là quy ước Perl rằng ** các giá trị riêng bắt đầu bằng dấu gạch dưới ** và ** không bao giờ được truy cập trực tiếp **. – Ether

+1

Dữ liệu :: Dumper rất hữu ích, nhưng đặc biệt vô giá đối với người mới bắt đầu. –

+1

@Pedro Silva: Tôi đồng ý. Đó là một sự đánh đổi thực sự. Tôi đã thấy một số lập trình viên va vào tường. * Nếu chỉ họ mới có thể nhìn thấy cuộc gọi DBI đang quay trở lại *. Anh chàng tôi đã cho thấy DD, rất biết ơn, và nó đã đẩy mạnh dự án của anh ấy. Nó chắc chắn tốt hơn cảm giác xung quanh một căn phòng tối. Kể từ khi tìm kiếm [Smart :: Comments] (http://search.cpan.org/perldoc?Smart::Comments), tôi đã đề xuất rằng với các nhà phát triển đồng nghiệp, là một cách gần như dễ dàng để có thể thấy mã của bạn thực sự đang làm gì. Tuy nhiên, cho thấy xương của những gì được coi là "đối tượng" có nhược điểm của nó, quá. – Axeman