Perl匹配多维数组元素

时间:2015-03-27 10:37:25

标签: arrays perl multidimensional-array pattern-matching

我没有得到任何输出,任何人都可以找到问题所在, 匹配还是打电话? (多维数组中的两个子数组具有相同的长度。)

//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 ;

    }

1 个答案:

答案 0 :(得分:0)

我认为问题在于:

$sestri = <>;

这可能不是你想做的 - 你的评论说&#34;用户指定的搜索字符串&#34;但那不是那个运营商所做的。

它的作用是打开你在命令行中指定的 filename ,然后返回&#39;第一行。

我建议如果你想从命令行中获取搜索字符串,你想通过@ARGV

进行搜索。

E.g。

my ( $sestri ) = @ARGV; # will give first word. 

但是,请开启use strictuse 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中匹配元素的数量我认为没有意义,但是如果它确实,然后根据您的需要进行修改。