2

我正在将 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

4 回答 4

1

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

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

my $spaces = ' ' x length($DNA1);
于 2009-04-28T15:27:46.977 回答
1

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

$DNA3 =~ tr/atcgATCG/ /;
于 2009-04-28T15:27:59.487 回答
1

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

$DNA3 =~ tr/ATCGatcg/ /;

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

祝你好运!

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

于 2009-04-28T15:29:52.993 回答
0

这是你想要的程序吗?

#!perl

我的 $s1 = 'AAAAAAAAA';
我的 $s2 = 'TCGAGCTA';

打印
    $s1, $s2, "\n",
    ' ' x 长度( $s1 ), $s2, "\n";
于 2009-04-29T15:00:26.113 回答