Perl 在蛋白质序列中寻找基序?
我编写了以下脚本来搜索蛋白质序列(字符串)中的基序(子字符串)。我是初学者,写这篇文章对我来说很难。关于这一点,我有两个问题: 1。错误:以下脚本几乎没有错误。我已经做了很长一段时间了,但还没有弄清楚是什么和为什么? 2.编写以下脚本是为了在蛋白质序列(字符串)中搜索一个基序(子字符串)。我的下一个任务是在同一个蛋白质序列(字符串)中按特定顺序搜索多个基序(例如:基序1基序2基序3基序4该顺序不能更改)Perl 在蛋白质序列中寻找基序?,perl,Perl,我编写了以下脚本来搜索蛋白质序列(字符串)中的基序(子字符串)。我是初学者,写这篇文章对我来说很难。关于这一点,我有两个问题: 1。错误:以下脚本几乎没有错误。我已经做了很长一段时间了,但还没有弄清楚是什么和为什么? 2.编写以下脚本是为了在蛋白质序列(字符串)中搜索一个基序(子字符串)。我的下一个任务是在同一个蛋白质序列(字符串)中按特定顺序搜索多个基序(例如:基序1基序2基序3基序4该顺序不能更改) 首先,关键字是elsif,其次你不需要它。您可以将get\u file\u data循环中的
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
分配给一个数组引用,该数组引用包含一个由subVLIM
返回的任何内容填充的插槽$&
。替换pos($序列)-长度($&)+1
或者更好地使用:
C.每次您不确定到目前为止得到了什么,比如如果您想查看$sequence
的当前内容,请在代码中放置以下内容:
### $sequence
exit 0;
只需显示它并退出。如果打印输出过多,请将其删除- 使用“elsif”而不是“elseif”
- @file\u数据和@fasta\u file\u数据应该是相同的吗
匹配位置中
:
- 删除子名称周围的括号
- 将“我的位置”更改为“我的@位置”
- 将模式从/regexp/ig更改为/$regexp/ig
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;