【发布时间】:2017-04-21 23:04:33
【问题描述】:
我正在尝试实现一个计算输入字符串的 d 邻居的子例程。这是planted motif search 实现的一部分,但我的问题更为笼统。代码如下:
#subroutine for generating d-neighbors
sub generate_d_neighbors{
# $sequence is the sequence to generate d-neighbors from
# $HD is the Hamming Distance
my ($sequence, $HD) = @_;
for(my $i = 0; $i=$HD; $i++){
my @l = ['A', 'C', 'T', 'G'];
my @t = splice(@l,$sequence[$i]);
#TODO
}
}
错误发生在最后一行,说:
Global symbol "@sequence" requires explicit package name (did you forget to declare "my @sequence"?
据我了解,Perl 不像 Java 中那样采用 subroutine(param1, param2) 形式的参数,但为什么 $sequence 没有被识别为已经初始化?
【问题讨论】:
-
你使用了
$sequence[0],但是你还没有声明@sequence。在 Perl 中,$sequence和@sequence是两个不同的变量 -
另外,分配
$i=$HD可能不是您的意思。通常会进行某种比较。 -
$sequence[0]是您访问名为@sequence的数组元素的方式。 Perl 正确地指出它对名为@sequence的变量一无所知。您可能传递了一个数组 reference,应该使用取消引用箭头访问它:$sequence->[0]
标签: perl subroutine