Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 在蛋白质序列中寻找基序?_Perl - Fatal编程技术网

Perl 在蛋白质序列中寻找基序?

Perl 在蛋白质序列中寻找基序?,perl,Perl,我编写了以下脚本来搜索蛋白质序列(字符串)中的基序(子字符串)。我是初学者,写这篇文章对我来说很难。关于这一点,我有两个问题: 1。错误:以下脚本几乎没有错误。我已经做了很长一段时间了,但还没有弄清楚是什么和为什么? 2.编写以下脚本是为了在蛋白质序列(字符串)中搜索一个基序(子字符串)。我的下一个任务是在同一个蛋白质序列(字符串)中按特定顺序搜索多个基序(例如:基序1基序2基序3基序4该顺序不能更改) 首先,关键字是elsif,其次你不需要它。您可以将get\u file\u data循环中的

我编写了以下脚本来搜索蛋白质序列(字符串)中的基序(子字符串)。我是初学者,写这篇文章对我来说很难。关于这一点,我有两个问题: 1。错误:以下脚本几乎没有错误。我已经做了很长一段时间了,但还没有弄清楚是什么和为什么? 2.编写以下脚本是为了在蛋白质序列(字符串)中搜索一个基序(子字符串)。我的下一个任务是在同一个蛋白质序列(字符串)中按特定顺序搜索多个基序(例如:基序1基序2基序3基序4该顺序不能更改)

  • 首先,关键字是
    elsif
    ,其次你不需要它。您可以将
    get\u file\u data
    循环中的代码压缩为:

    next if $line =~ /^\s*$|^>/; 
    $sequence .= $line;
    
    只要您要使用正则表达式——除非过于笨拙——您就可以搜索所有您想要忽略的情况。如果您发现实际的第二种情况,您可以将其添加为另一种备选方案。假设您想排除以
    -
    开头的行。然后您可以这样添加它:
    /^\s*$| ^>| ^-/

  • 另一件事是
    我的位置=()
    需要在position()之前使用
    @
    符号,否则,perl会认为调用
    position()
    有点棘手

  • 您需要进行以下更改:

     my $h= '[VLIM]';   
     my $s= '[AG]';
     my $x= '[ARNDCEQGHILKMFPSTWYV]';
    
    否则,您只需将
    $h
    分配给一个数组引用,该数组引用包含一个由sub
    VLIM
    返回的任何内容填充的插槽

  • 第三,不要使用
    $&
    。替换
    pos($序列)-长度($&)+1

    或者更好地使用:

    C.每次您不确定到目前为止得到了什么,比如如果您想查看
    $sequence
    的当前内容,请在代码中放置以下内容:

    ### $sequence
    exit 0;
    
    只需显示它并退出。如果打印输出过多,请将其删除

    • 使用“elsif”而不是“elseif”
    • @file\u数据和@fasta\u file\u数据应该是相同的吗
    匹配位置中

    • 删除子名称周围的括号
    • 将“我的位置”更改为“我的@位置”
    • 将模式从/regexp/ig更改为/$regexp/ig

    @Nathan Kitchen:我认为不应该发生变化@法斯塔。。。保存来自输入的行,但另一个保存其他行。您似乎将get_file_data传递给文件名,但随后跳到将其读入数组的位置。请参阅我的第5页,了解如何实现这一点。
    push @positions, $-[0];
    
    use English qw<-no_match_vars>;
    ...
    push @positions, $LAST_MATCH_START[0];
    
    use IO::File;
    ...
    # Use real file handles
    my $fh = IO::File->new( "<seq.txt" );
    get_file_data( $fh ); # They can be passed
    ...
    sub get_file_data{
        my $file_handle = shift; 
        ...
        # while loop conserves resources
        while ( my $line = <$file_handle> ) { 
            next if $line =~ /^\s*$|^>/;
            $sequence .= $line;
        } 
    
     use Smart::Comments;
    
    ### $sequence
    exit 0;