我没有得到任何输出,任何人都可以找到问题所在, 匹配还是打电话? (多维数组中的两个子数组具有相同的长度。)
//Multidimensional array,
//Idarray = Fasta ID, Seqarray = "ATTGTTGGT" sequences
@ordarray = (\@idarray, \@seqarray);
//This calling works
print $ordarray[0][0] , "\n";
print $ordarray[1][0] , "\n", "\n";
// Ordarray output = "TTGTGGCACATAATTTGTTTAATCCAGAT....."
用户输入搜索字符串,循环迭代序列维度, 并计算匹配数量。从ID维度打印匹配数和相应的ID。
//The user input-searchstring
$sestri = <>;
for($r=0;$r<@idarray;$r++) {
if ($sestri =~ $ordarray[1][$r] ){
print $ordarray[0][$r] , "\n";
$counts = () = $ordarray[0][$r] =~ /$sestri/g;
print "number of counts: ", $counts ;
}
答案 0 :(得分:0)
我认为问题在于:
$sestri = <>;
这可能不是你想做的 - 你的评论说&#34;用户指定的搜索字符串&#34;但那不是那个运营商所做的。
它的作用是打开你在命令行中指定的 filename ,然后返回&#39;第一行。
我建议如果你想从命令行中获取搜索字符串,你想通过@ARGV
E.g。
my ( $sestri ) = @ARGV; # will give first word.
但是,请开启use strict
和use warnings
。您应该始终在论坛上发帖之前执行此操作以获得帮助。
我还会质疑为什么你需要一个带有两个元素的二维数组。这似乎没必要。
为什么不做一个哈希,并键入你的&#34; fasta id&#34;顺序?
E.g。
my %id_of;
@id_of{@seqarray} = @idarray;
my %seq_of;
@seq_of{@id_array} = @seqarray;
我认为这会更好地适合您的代码,因为那样您根本不必担心数组指标。
use strict;
use warnings;
my ($sestri) = @ARGV;
my %id_of;
@id_of{@seqarray} = @idarray;
foreach my $sequence ( keys %id_of ) {
##NB - this is a pattern match, and will be 'true'
## if $sestri is a substring of $sequence
if ( $sequence =~ m/$sestri/ ) {
print $id_of{$sequence}, "\n";
my $count = () = $sequence =~ m/$sestri/g;
print "number of counts: ", $count, "\n";
}
}
我已经重写了一下,因为我并不完全理解你的代码在做什么。 看起来就像@seqarray
中的子字符串匹配一样,但后来又返回了@idarray
中匹配元素的数量我认为没有意义,但是如果它确实,然后根据您的需要进行修改。