在数组中打印值

时间:2012-02-16 01:36:35

标签: perl cgi

我似乎无法弄清楚如何打印一些返回值,例如:titleurlcontent

    #!/usr/bin/perl

    print "Content-type: text/html\n\n";
    use REST::Google;

    # set service to use
    REST::Google->service('http://ajax.googleapis.com/ajax/services/search/web');

    # provide a valid http referer
    REST::Google->http_referer('http://www.example.com');

    my $res = REST::Google->new(
            q => 'ice cream',
    );

    die "response status failure" if $res->responseStatus != 200;

    my $data = $res->responseData;

    use Data::Dumper;
    print Dumper( $data );

    my @results = $data->results;

    # CANT MAKE THIS WORK
    foreach my $r (@result) {
            print "\n";
            print $r->title;
            print $r->url;
            print $r->content;
    }

2 个答案:

答案 0 :(得分:2)

尝试:

foreach my $r (@results) {

注意“s” - 如果你放在脚本的顶部:

use strict;
use warnings;

你会抓住这些东西

答案 1 :(得分:0)

#!/usr/bin/perl

use strict;

print "content-type: text/html\n\n";
use REST::Google;

# set service to use
REST::Google->service(
    'http://ajax.googleapis.com/ajax/services/search/web' );

# provide a valid http referer
REST::Google->http_referer( 'http://www.example.com' );

my $res = REST::Google->new( q => 'ice cream', );

die "response status failure" if $res->responseStatus != 200;

my $data    = $res->responseData;
my @results = @{ $data->{results} };

foreach my $r ( @results ) { 
    print "\n";
    print $r->{title};
    print $r->{url};
    print $r->{content};
}

这里有几个问题:

1)$ data不是一个对象,所以你不能把它当成一个对象。

如果您在对象上调用方法,

$ data->结果将是正确的语法。在这种情况下,$ data只是一个常规的HASHREF,所以语法是:

$ DATA-> {结果}

2)$ data-> {results}是ARRAYREF而不是ARRAY。因此,您需要取消引用它以获取值。

现在,我的@results = $ data-> {results}变为:

我的@results = @ {$ data-> {results}};

@ {ARRAYREF}是您取消引用数组的方式。

3)当您在@results上进行迭代时,您将再次使用对象语法。但是,@results的值也只是普通的HASHREF。所以,$ r->标题变为:

$ R-> {TITLE}

使用像Data :: Dumper这样的工具来检查返回值可能是排除这类事情的关键。您可能还想查看Data::Printer,它比Data :: Dumper

更性感