我想實現一個計算輸入字符串的d鄰居的子例程。這是planted motif search的實現的一部分,但我的問題更一般。下面是代碼:這個Perl子程序有什麼問題?
#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不帶參數的形式subroutine(param1, param2)
象Java例如,但爲什麼$sequence
未被識別爲已經被初始化?
你使用'$序列[0 ]',但是你還沒有聲明'@ sequence'。在Perl中,'$ sequence'和'@ sequence'是兩個不同的變量 –
另外,賦值'$ i = $ HD'可能不是你的意思。通常有一些比較去那裏。 –
'$ sequence [0]'是您如何訪問名爲'@ sequence'的數組的元素。 Perl正確地注意到它不知道任何關於名爲'@ sequence'的變量。你可能會傳遞一個數組引用*,它應該使用解引用箭頭來訪問:'$ sequence - > [0]' –