Как мне присвоить много значений определенной переменной Perl?

StackOverflow https://stackoverflow.com/questions/829343

  •  06-07-2019
  •  | 
  •  

Вопрос

Я пишу скрипт на Perl, который ищет мотив (подстроку) в последовательности белка (string).Последовательность мотивов, подлежащая поиску (или подстрока), является hhhDDDssEExD, где:

  • h является ли какая-либо гидрофобная аминокислота
  • s это любая маленькая аминокислота
  • x является ли какая-либо аминокислота
  • h, s, x может иметь больше чем один значение отдельно

Можно ли присвоить одной переменной более одного значения?Если да, то как мне это сделать?Я хочу присвоить переменной список из нескольких значений.

Это было полезно?

Решение

Я не большой эксперт в perl, так что, вполне возможно, есть более быстрый способ сделать это, но, похоже, что оператор match "//"в контексте списка - это то, что вам нужно.Когда вы присваиваете результат операции сопоставления списку, оператор сопоставления принимает контекст списка и возвращает список с каждым из вложенных выражений, разделенных круглыми скобками.Если вы укажете глобальные соответствия с помощью "g" установите флажок, он вернет список всех совпадений каждого подвыражения.Пример:

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

Будет распечатан

x.x.x

Я предполагаю, что у вас есть регулярное выражение для каждого из этих 5 типов h, D, s, E, и x.Вы не сказали, является ли каждая из этих частей одним символом или несколькими, поэтому я собираюсь предположить, что они могут быть несколькими символами.Если это так, ваше решение может быть чем-то вроде этого:

$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's оператор сопоставления, и регулярные выражения.

Другие советы

Похоже, вам нужно какое-то соответствие шаблону.Это может быть сделано со строками, использующими регулярные выражения.

Вы можете использовать символьные классы в своем регулярном выражении.Классы, о которых вы упомянули, были бы:

 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/

Регулярные выражения Perl это то, что вам нужно

Я мог бы быть далек от истины, но, похоже, вы хотите, чтобы объект со встроенным методом выводился в виде строки.

Если вы начинаете со строки, подобной той, которую вы упомянули, вы могли бы передать строку классу как новый объект, используя регулярные выражения, подобные тем, которые все уже предлагали, для разбора фрагментов, которые вы затем назначили бы в качестве переменных этому объекту.Наконец, вы могли бы заставить его выводить строку, основанную на переменных этого объекта, например:

 $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.Но если я правильно понял ваш вопрос, вы ищете способ получить всю информацию из строки, но сохранить ее привязанной к этой строке.Это были бы объекты и классы.

Вероятно, вам нужен массив (или arrayref) или шаблон (qr//).

Или, может быть Квантовый::Суперпозиции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top