我对Perl来说比较新,所以请耐心等待。
我的子getGenes在SequenceModule类中调用getFeaturesByGeneName。第一个循环运行正常但是在第二个循环中它尝试在字符串$ name上调用get_SeqFeatures(一个BioPerl子),这意味着它跳过我的$ self = shift。
我错过了什么?
sub getGenes
{
my @names = shift;
my $genome = shift;
my @cds;
foreach my $name (@names)
{
my $feat = SequenceModule -> getFeatureByGeneName($genome, $name);
push (@cds, $feat);
}
return @cds;
}
...
sub getFeatureByGeneName
{
my $self = shift;
my $seq = shift;
my $name = shift;
my @cds = $seq -> get_SeqFeatures("CDS");
...
}
答案 0 :(得分:8)
猜测:您使用多个名称调用<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9-RC1</version>
</dependency>
:
getGenes
列表不嵌套在Perl中,因此参数被展平:
getGenes(('name1', 'name2'), $genome);
getGenes('name1', 'name2', $genome);
不能返回多个元素。因此,
shift
相当于
my @names = shift;
第二个名称仍在my @names;
$names[0] = shift;
,因此转到@_
:
$genome
如果您需要将列表传递给sub,请将其作为最后一个参数,或发送引用:
my $genome = shift;