为什么不是Perl的tr ///做我想做的事情?

时间:2009-04-28 15:21:08

标签: perl syntax perl4

我使用Perl作为脚本,将输入作为两个短的DNA串。作为输出,我连接两个字符串字符串然后打印在连接字符串末尾的副本上排列的第二个字符串。例如:如果输入字符串是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 个答案:

答案 0 :(得分:1)

您需要在tr命令的后半部分添加一个空格。

或者,您似乎要做的是创建一个包含与第一个字符串中的字符一样多的空格的变量:

my $spaces = ' ' x length($DNA1);

答案 1 :(得分:1)

你的tr改变任何ACTGatcg并删除它们。我想你想要

$DNA3 =~ tr/atcgATCG/ /;

答案 2 :(得分:1)

这可能只是一个简单的语法错误。尝试:

$DNA3 =~ tr/ATCGatcg/ /;

其中第二个斜杠将两个平移实体分开,并且在第二个和第三个斜杠之间有一个空格字符。

祝你好运!

编辑:我的错误 - 误解了你想做的事情。答案相应调整:)

答案 3 :(得分:0)

这是你想要的程序吗?

#!perl

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

print 
    $s1, $s2, "\n", 
    ' ' x length( $s1 ), $s2, "\n";