Perl返回未知长度的数组引用列表

时间:2016-08-19 11:20:04

标签: perl

我在Perl中有一个sub,它需要返回一个数组引用列表以适应包的其余部分。问题是我事先并不知道我将生成多少个数组引用。我通常的推送数组的方法是我生成一个数组并返回一个引用,但不能使用其余代码,我无法在不破坏遗留内容的情况下进行更改。

sub subTrackTable {
    my ($self, $experimentName, $subTrackAttr) = @_;

    # return nothing if no subtracks required
    if ($subTrackAttr eq 'no_sub') {
        return;
    }

    # get distinct values for subtrack attr (eg antibody) from db
    my $dbh = $self->dbh();
    my $sh = $dbh->prepare("SELECT DISTINCT * blah sql");
    $sh->execute();
    my @subtrackTable;
    while (my ($term, $value) = $sh->fetchrow_array()) {
        my $subtrack = [':$value', $value];
        push (@subtrackTable, $subtrack);
    }
    $sh->finish();

    # this is hard-coded for one experiment and does what I want
    # Want to loop through @subtrackTable and return a list of all the array refs it contains
    # Returning nested array refs doesn't work with external code
    return ([":H3K4me3", "H3K4me3"],[":H4K20me3", "H4K20me3"]);
}

问题在于,因为我从数据库动态获取值,所以我不知道会有多少值。只返回\ @subtrackTable,这将是我通常的策略打破其余的代码。如果我事先知道会有多少像我这样做

my $a1 = [":$value1", $value1];
my $a2 = [":$value2", $value2];
...
my $an = [":$valuen", $valuen];
return($a1, $a2,...$an);

但是我无法看到如何使用未知数量的arrayrefs来完成这项工作。

帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

看起来你只需要

return @subtrackTable;

此外,这一行

my $subtrack = [':$value', $value];

必须更改为使用双引号,例如

my $subtrack = [ ":$value", $value ];