Domanda

Sto scrivendo una sceneggiatura in Perl che cerca un motivo (sottostringa) nella sequenza proteica (stringa). La sequenza di motivi da cercare (o sottostringa) è hhhDDDssEExD, dove:

  • h è qualsiasi amminoacido idrofobo
  • s è qualsiasi piccolo amminoacido
  • x è qualsiasi amminoacido
  • h, s, x può avere più di un valore separatamente

È possibile assegnare più di un valore a una variabile? Se sì, come dovrei farlo? Voglio assegnare un elenco di più valori a una variabile.

È stato utile?

Soluzione

Non sono un grande esperto di perl, quindi probabilmente c'è un modo più rapido per farlo, ma sembra che l'operatore di corrispondenza " // " nel contesto dell'elenco è ciò di cui hai bisogno. Quando si assegna il risultato di un'operazione di corrispondenza a un elenco, l'operatore di corrispondenza assume il contesto di elenco e restituisce un elenco con ciascuna delle espressioni secondarie delimitate da parentesi. Se specifichi corrispondenze globali con " g " flag, restituirà un elenco di tutte le corrispondenze di ogni sottoespressione. Esempio:

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

Stampa

x.x.x

Suppongo che tu abbia un'espressione regolare per ciascuno di quei 5 tipi h , D , s , E e x . Non hai detto se ognuna di queste parti è un singolo personaggio o multiplo, quindi suppongo che possano essere più personaggi. In tal caso, la tua soluzione potrebbe essere qualcosa del genere:

$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);
}

Sono sicuro che ci sia qualcosa che mi è sfuggito e ci sono alcune sottigliezze di perl che ho trascurato, ma questo dovrebbe farti arrivare fin lì. Per ulteriori informazioni, leggi su espressioni regolari .

Altri suggerimenti

Sembra che tu voglia una sorta di corrispondenza del modello. Questo può essere fatto con stringhe che usano espressioni regolari.

Puoi usare le classi di caratteri nella tua espressione regolare. Le classi che hai citato sarebbero:

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

L'ultimo significa "da A a I, da K a N, da P a T, da V a Z".

L'espressione regolare per il tuo esempio sarebbe:

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

Perl Regular Expressions è ciò di cui hai bisogno

Potrei essere molto lontano, ma sembra che tu voglia un oggetto con un metodo incorporato da emettere come stringa.

Se inizi con una stringa, come quella che hai menzionato, potresti passare la stringa alla classe come un nuovo oggetto, utilizzare espressioni regolari come tutti hanno già suggerito di analizzare i blocchi che poi assegneresti come variabili a quell'oggetto. Infine, potresti averne generato una stringa in base alle variabili di quell'oggetto, ad esempio:

 $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;

Okay, quel tipo di crollo alla fine, ed era pseudo-php, non perl. Ma se capisco correttamente la tua domanda, stai cercando un modo per ottenere tutte le informazioni dalla stringa ma tenerle legate a quella stringa. Sarebbe oggetti e classi.

Probabilmente vuoi un array (o arrayref) o un pattern (qr //).

O forse Quantum :: Superpositions .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top