我在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来完成这项工作。
帮助表示赞赏!
答案 0 :(得分:2)
看起来你只需要
return @subtrackTable;
此外,这一行
my $subtrack = [':$value', $value];
必须更改为使用双引号,例如
my $subtrack = [ ":$value", $value ];