Ваш код отлично работает в системе * nix, где \n
является единственным ограничителем строки, а строки текста в @output
не заканчиваются на \n
.
#!/usr/bin/perl
my @output = ("ttagggcccgg-a-tc---attaccgggc--caa",
"tta--gcgcgg-attcg-gatta-cggg---c-a",
"gcg--gggcggcattagcaattt-gggg-atc-a",
"-ta--gcgc---a-----aataa-ccgg------");
my $center = 1;
my $score = -62;
print "$score\n";
for (my $i = 0; $i < 4; $i++)
{
print $output[$i];
if($i == $center)
{
print "*";
}
print "\n";
}
Выход:
-62
ttagggcccgg-a-tc---attaccgggc--caa
tta--gcgcgg-attcg-gatta-cggg---c-a*
gcg--gggcggcattagcaattt-gggg-atc-a
-ta--gcgc---a-----aataa-ccgg------
Единственный способ, которым я вижу, как ваш код генерирует вывод, который вы публикуете, - это если каждая строка текста, содержащаяся в @output
, заканчивается \r
, что приведет к возврату каретки, тогда вы напечатаете *
(который перезапишет первый символ строки, которую вы только что вывели), за которой следует \n
в нижней части цикла.
Если я изменю @output
в моем примере на:
my @output = ("ttagggcccgg-a-tc---attaccgggc--caa\r",
"tta--gcgcgg-attcg-gatta-cggg---c-a\r",
"gcg--gggcggcattagcaattt-gggg-atc-a\r",
"-ta--gcgc---a-----aataa-ccgg------\r");
Тогда вывод будет:
-62
ttagggcccgg-a-tc---attaccgggc--caa
*ta--gcgcgg-attcg-gatta-cggg---c-a
gcg--gggcggcattagcaattt-gggg-atc-a
-ta--gcgc---a-----aataa-ccgg------
ТАК, окончательный ответ таков: избавьтесь от \r
в конце тех. :)
Редактировать: Как указывает TLP в комментариях ниже, использование подстановки регулярных выражений, чтобы убедиться, что в конце этих строк нет ничего, должно вас исправить:
for (my $i = 0; $i < 4; $i++)
{
$output[$i] =~ s/\s*$//;
print $output[$i];
...
Последнее редактирование: Из приведенных ниже комментариев от TLP я бы угадал эти данные считываются из файла, который поступил с машины Windows, где строки заканчиваются на \r\n
. При чтении этого файла в perl на OSX вы используете chomp
для удаления новых строк. В OSX chomp
только удалит \n
(по умолчанию) и оставит \r
без изменений.