Perl:子例程的第一个参数不是类

时间:2015-05-27 14:58:41

标签: perl subroutine

我对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");

    ...
}

1 个答案:

答案 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;
相关问题