У меня есть массив (@myarray) со строками, такие как:Разделение определенных строк в массиве?
rs30000489
rs903484
rs24567;rs324987;rs234985
rs5905002
rs32456;rs2349085
Когда я соответствовать другому подобному (@otherarray) массив без строк с запятой и несколько rsIDs, с помощью следующего кода:
for $1(0 .. $#otherarray) {
for $m(1 .. $#myarray) {
if ($myarray[$m] =~ /$otherarray[$i]/i) {
$IDmatch = 1;
}
}
}
Сценарий не соответствует ни одному из идентификаторов в строках с точкой с запятой. Я пытался расколоть строки точкой с запятой, как, например:
foreach $string (@myarray) {
if ($string =~ m/;/) {
push (@newarray, $string);
}
}
который возвращает массив @new:
rs24567;rs324987;rs234985
rs32456;rs2349085
Что я тогда попытаться разбить его на общий характер, как, например:
foreach $line (@new) {
$line =~ tr/;//d;
$line =~ s/rs/ rs/g;
$line = split (/ /);
}
Но когда я печатаю массив @new, он просто возвращает нули. Я знаю, что это должно иметь какое-то отношение к моей петле, потому что мне трудно работать с циклами в perl. Пожалуйста, дайте мне знать, если у вас есть идеи! Благодаря!
Это звучит как [XY-проблема] (http://meta.stackexchange.com/q/66377/162416). Что вы действительно хотите делать? Сопоставьте два списка идентификаторов друг против друга? – TLP
Кроме того, вы должны быть более осторожны при написании важных описаний. Что это значит: «без строк с точкой с запятой и несколькими rsID». Без строк с полуколонами звучит как его только полуколоны. Вы должны почти всегда показывать, а не описывать. – TLP
и ваш '' split'' на самом деле не раскол. Его соответствие для ';', а затем нажатие на '@ new' –