需要帮助以更好(更漂亮)的方式将正确的数组传递给perl中的子程序

时间:2014-08-24 21:12:14

标签: perl arrays

从网上抓取了一些数据。我在结构$ res中得到了类似这样的数据(见下文 - 使用datadumper)。 $ res是一个哈希数组,带有一个哈希数组pageurls

想要从pageurl获取lastpage,这始终位于最后一个pageurl数组中。 sub lastpage有两个参数页面(当前页面)和数组页面。

$res = {
       'pageurls' => [
                       bless( do{\(my $o = 'http://digitalarkivet.arkivverket.no/finn_kilde?s=&fra=&til=&ka%5B0%5D=1&kt%5B0%5D=MANN&kt%5B1%5D=MINI&kt%5B2%5D=KLOK&kt%5B3%5D=FREG&k%5B0%5D=1820&k%5B1%5D=1843&k%5B2%5D=1804&page=1')}, 'URI::http' ),
                       bless( do{\(my $o = 'http://digitalarkivet.arkivverket.no/finn_kilde?s=&fra=&til=&ka%5B0%5D=1&kt%5B0%5D=MANN&kt%5B1%5D=MINI&kt%5B2%5D=KLOK&kt%5B3%5D=FREG&k%5B0%5D=1820&k%5B1%5D=1843&k%5B2%5D=1804&page=2')}, 'URI::http' )
                     ],
       'page' => '1',
       'comment' => " S\x{f8}ket ditt gav 74 treff: "
       }

my $lastpage = &lastPage($res->{'page'},$res->{'pageurls'});

sub lastPage {
    my @pageurls=$_[1];

    if (@pageurls) {
        my @bits= split /page=/,$pageurls[0][-1];
        my $rv=$bits[-1];

        return $rv
    } else {
        return $_[0];
    }
}

#Looking in debugger I see the following structure for @pageurls
#[0]
#  ->[0] http....
#  ->[1] http....

如何将pageurls作为一维数组传递,然后再使用它?

1 个答案:

答案 0 :(得分:1)

问题在于:

my @pageurls=$_[1];

$_[1]是一个数组引用,因此您必须取消引用它才能获得数组。

my @pageurls = @{ $_[1] };

然后,您可以使用$pageurls[-1]访问最后一个。

如果您想将pageurl作为列表传递,可以在调用中取消引用它:

my $lastpage = lastPage($res->{page}, @{ $res->{pageurls} });

然后,您必须更改子例程的参数处理:

sub lastPage {
    my $page = shift;  # Remove the first member from @_.
    my @pageurls = @_;