2009-05-06 45 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。但是,如果我正確理解您的問題,您正在尋找一種方法來獲取字符串中的所有信息,但將其與該字符串綁定。那將是對象和類。

相關問題