Как получить доступ к значению вложенного хэша Perl? - PullRequest
10 голосов
/ 01 мая 2010

Я новичок в Perl, и у меня очень простая проблема, но я не могу найти ответ при обращении к своей книге по Perl.

При печати результата

Dumper($request);

я получаюследующий результат:

$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' );

Как мне получить доступ к значениям '_method' ('GET') или 'host' ('localhost: 8081').

Я знаю, этопростой вопрос, но в начале Perl несколько загадочен.

1 Ответ

13 голосов
/ 01 мая 2010

У Нартринга все верно, как и у метода грубая сила . Вложенные хэши обрабатываются цепочкой ключей следующим образом:

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

Однако, поскольку оба эти "хэша" являются благословенными объектами. Это может помочь при чтении HTTP::Server::Simple::Dispatched::Request, который может сказать вам, что это объект HTTP::Request, и в разделе HTTP::Request методов header и method , говорит вам, что следующее делают свое дело:

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

Действительно, я рекомендую вам получить поисковый плагин firefox под названием Perldoc Module :: Name , и когда вы встретите вывод Dumper с надписью «благослови ...» Some :: Module :: Name ', вы можете просто скопируйте и вставьте его в поисковый плагин и прочитайте документацию по CPAN.

...