发电机组数组在Perl [英] Generating sets of array in perl

查看:176
本文介绍了发电机组数组在Perl的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于perl脚本在削减E输入序列,并跳过这是在@nobreak提到的E的那些特定的位置,并产生碎片的数组作为输出。但我想产生这样的阵列的集输出为每个已跳过采取@nobreak的所有位置考虑位置的脚本。说设置1包含碎片造成的E37后跳,在E45跳绳,等后置2。下面提到的脚本,我写的是不能正常工作。我想生成输出服用@nobreak之一的地位在一个时间4个不同的阵列。请帮助!

 我的$ S = 'MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN';打印出1错过卵裂的结果:\\ n \\ n;我@nobreak =(37,45,57,59);
{
    @nobreak = {图$ _ - 1} @nobreak;    的foreach(@nobreak){        SUBSTR($ S,$ _,1)=\\ 0;
    }
    我@a =拆分/ E(P?!)/,$ S;
    $ _ =〜S / \\ 0 / E / G的foreach(@a);
    $结果=加盟E,@a;
    @final =分流/,/,$结果;
    打印@final \\ N的;
}


解决方案

遍历@nobreak?

 我的$ S = 'MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN';
打印出1错过卵裂的结果:\\ n \\ n;
我@nobreak =(37,45,57,59);
我的$ NOBREAK(@nobreak){
    SUBSTR($ S,$ NOBREAK-1,1)=\\ 0;
    我@a =拆分(/ E(P)/,$ s吗?!);
    SUBSTR($ S,$ NOBREAK-1,1)='E';
    $ _ =〜S / \\ 0 / E / G的foreach(@a);
    $结果=加入(E,@a);
    @final =拆分(/,/,$结果);
    打印@final \\ N的;
}

Given perl script cut the input sequence at "E" and skips those particular positions of "E" which is mentioned in @nobreak, and generates an array of fragments as an output. But I want a script which generates set of such array in output for every position which has been skipped taking all positions of @nobreak into account. say set 1 contains fragments resulted after skipping at "E" 37, set 2 after skipping at "E" 45, and so on. Below mentioned script which I wrote is not working correctly. I want to generate 4 different array in output taking one position of @nobreak at a time. Please help!

my $s = 'MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN';

print "Results of 1-Missed Cleavage:\n\n";

my @nobreak = (37, 45, 57, 59);
{
    @nobreak = map { $_ - 1 } @nobreak;

    foreach (@nobreak) {

        substr($s, $_, 1) = "\0";
    } 
    my @a   = split /E(?!P)/, $s;
    $_      =~ s/\0/E/g foreach (@a);
    $result = join "E,", @a; 
    @final  = split /,/, $result;
    print "@final\n";
}

解决方案

Loop over @nobreak?

my $s = 'MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN';
print "Results of 1-Missed Cleavage:\n\n";
my @nobreak = (37,45,57,59);
for my $nobreak (@nobreak) {
    substr($s, $nobreak-1, 1) = "\0";
    my @a = split(/E(?!P)/, $s);
    substr($s, $nobreak-1, 1) = 'E';
    $_ =~ s/\0/E/g foreach (@a);
    $result = join ("E,", @a); 
    @final = split(/,/, $result);
    print "@final\n";
}

这篇关于发电机组数组在Perl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆