【发布时间】:2010-10-22 08:40:45
【问题描述】:
我正在将 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;
【问题讨论】:
-
这只是格式不好还是 Perl 的语法格式实际上是这样的?
-
不是 "$DNA1=~ s/\r?\n?$//;"和“chomp $DNA1;”一样吗?
-
是 "$DNA1=~ s/\r?\n?$//;"与“chomp $DNA”相同。但 perl 4 及更低版本不支持 chomp,因此它是一种替代方案。我的机器安装了 perl 4。
-
@Alnitak & @Bobby - 并且,假设目标机器上的 perl 4,代码看起来不会好很多(那些严格和警告也不会做太多)。顺便说一句:找到一台运行 perl 4 的机器真的很可怕。Perl 5 是 15 年前发布的!
-
$DNA1=~s/\r?\n?$//;仅当输入记录分隔符为 \r\n 时才与 chomp 相同,但它可能不是。