2009-05-06 42 views
1

我正在用Perl编写一个脚本,它在蛋白质序列(字符串)中搜索motif(substring)。的基序序列被搜索(或子串)是hhhDDDssEExD,其中:如何为特定的Perl变量分配多个值?

  • ħ是任何疏水性氨基酸
  • 小号是任何小的氨基酸
  • X是任何氨基酸
  • H,S,X可以具有单独多于一个

可以将多个值分配给一个变量吗?如果是的话,我该怎么做?我想为变量分配多个值的列表。

+0

请稍微说明一下这个问题。您是否希望根据输入数据将多个可能的TYPES值分配给变量,还是希望将多个值的LIST分配给变量? – 2009-05-06 12:43:42

回答

2

我在Perl中没有大的专家,所以没有很可能是一个更快的方式这一点,但它似乎是匹配操作符“//”在列表环境是你所需要的。当您将匹配操作的结果分配给列表时,匹配运算符将采用列表上下文并返回带有每个括号分隔的子表达式的列表。如果使用“g”标志指定全局匹配,它将返回每个子表达式的所有匹配项的列表。例如:

# print a list of each match for "x" in "xxx" 
@aList = ("xxx" =~ /(x)/g); 
print(join(".", @aList)); 

会打印出

x.x.x 

我假设你为每个5种hDsEx的正则表达式。你没有说每个部分是单个字符还是多个,所以我会假设他们可以是多个字符。如果是这样,你的解决方案可能是这样的:

$h = ""; # Insert regex to match "h" 
$D = ""; # Insert regex to match "D" 
$s = ""; # Insert regex to match "s" 
$E = ""; # Insert regex to match "E" 
$x = ""; # Insert regex to match "x" 

$sequenceRE = "($h){3}($D){3}($s){2}($E){2}($x)($D)" 

if ($line =~ /$sequenceRE/) { 
    $hPart = $1; 
    $sPart = $3; 
    $xPart = $5; 

    @hValues = ($hPart =~ /($h)/g); 
    @sValues = ($sPart =~ /($s)/g); 
    @xValues = ($xPart =~ /($x)/g); 
} 

我敢肯定有东西,我已经错过了,还有的Perl的一些微妙之处被我忽略的,但这应该让你大部分的在那里。欲了解更多信息,请阅读perl的match operatorregular expressions

+0

@levy我不明白你为什么写 $ hPart = $ 1; $ sPart = $ 3; $ xPart = $ 5; ,然后等同于@hvalues等 – shubster 2009-05-06 18:19:55

3

看来你想要某种模式匹配。这可以通过使用正则表达式的字符串来完成。

+1

@shubster:如果您对此完全陌生,那么“正则表达式”是一个特定的术语,它描述了一种模式匹配语言,使用非常适合您的任务的有趣符号。 Google“正则表达式教程”。 – 2009-05-06 13:21:16

3

您可以在正则表达式中使用字符类。你提到的类将是:

h -> [VLIM] 
s -> [AG] 
x -> [A-IK-NP-TV-Z] 

最后一个意思是“A到I,K到N,P到T,V到Z”。

您的示例中的正则表达式是:

/[VLIM]{3}D{3}[AG]{2}E{2}[A-IK-NP-TV-Z]D/ 
0

我可能是遥远,但它听起来像是你想有一个内置的方法输出为字符串的对象。

如果你从一个字符串开始,就像你提到的那样,你可以把字符串作为一个新对象传递给类,像每个人都已经建议的那样使用正则表达式来解析出你将作为变量赋值的块到那个对象。最后,你可以把它输出基于该对象的变量,例如字符串:

$string = "COHOCOHOCOHOCOHOCOHOC"; 
$sugar = new Organic($string); 

Class Organic { 
$chem; 
     function __construct($chem) { 
      $hydro_find = "OHO"; 
      $carb_find = "C"; 
      $this-> hydro = preg_find ($hydro_find, $chem); 
      $this -> carb = preg_find ($carb_find, $chem); 

     function __TO_STRING() { 
      return $this->carb."="$this->hydro; 
     } 
    } 

echo $sugar; 

好了,那种最终土崩瓦解,这是假的PHP,不使用Perl。但是,如果我正确理解您的问题,您正在寻找一种方法来获取字符串中的所有信息,但将其与该字符串绑定。那将是对象和类。

相关问题