Почему Perl tr /// не делает то, что я хочу? - PullRequest
2 голосов
/ 28 апреля 2009

Я использую Perl для сценария, который принимает входные данные в виде двух коротких цепочек ДНК. В качестве выходных данных я объединяю строки из двух строк, а затем печатаю вторую строку, выстроенную поверх ее копии, в конце объединенной строки. Например: если входной строкой является AAAA и TTTTT, выведите:

AAAAATTTTT
     TTTTT

Я знаю, что есть и другие способы сделать это, но мне любопытно узнать, почему мое использование tr /// не работает.

Код для программы:

use strict;
use warnings;
print "enter a DNA sequence \n";
$DNA1=<>; #<> shorthand for STDIN
$DNA1=~ s/\r?\n?$//;
print $DNA1 "\n\n";
print "enter second DNA sequence \n";
$DNA2=<>;
$DNA2=~ s/\r?\n?$//;
print $DNA2 "\n\n";
$DNA= join("",($DNA1,$DNA2));
print "Both DNA sequences are \"$DNA\" \n\n";
$DNA3=$DNA1;
$DNA3=~ tr/ATCGatcg//;
print $DNA3 "\n\n";
$DNA4= join("",($DNA3,$DNA2));
print $DNA4 "\n\n";
exit;

Ответы [ 4 ]

1 голос
/ 28 апреля 2009

Ваш tr изменяет любой из ACTGatcg и удаляет их. Я думаю, что вы хотите

$DNA3 =~ tr/atcgATCG/ /;
1 голос
/ 28 апреля 2009

Это может быть просто синтаксическая ошибка. Попробуйте:

$DNA3 =~ tr/ATCGatcg/ /;

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

Удачи!

Редактировать: моя ошибка - неправильно понял, что вы хотели сделать. Ответ скорректирован соответственно:)

1 голос
/ 28 апреля 2009

Во второй половине команды tr необходимо поставить пробел.

В качестве альтернативы, кажется, что вы пытаетесь создать переменную, содержащую столько пробелов, сколько было символов в первой строке:

my $spaces = ' ' x length($DNA1);
0 голосов
/ 29 апреля 2009

Вам нужна эта программа?

#!perl

my $s1 = 'AAAAAAAAA';
my $s2 = 'TCGAGCTA';

print 
    $s1, $s2, "\n", 
    ' ' x length( $s1 ), $s2, "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...