10

私は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は最初はやや不可解です。

4

1 に答える 1

13

ナースリングは、力ずくの方法に関しては正しい。ネストされたハッシュは、次のようにキーをチェーンすることで対処されます。

$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のセクションを見ると、次の方法でうまくいくことがわかります。headermethod

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

本当に、Perldoc Module::Name という名前のFirefox 検索プラグインを入手することをお勧めします。「bless ... 'Some::Module::Name'」という Dumper 出力が表示されたら、それをコピーして検索プラグインに貼り付けるだけです。 CPAN のドキュメントを読んでください。

于 2010-05-01T07:53:06.940 に答える