2009-04-28 40 views
2

我正在使用Perl作爲輸入爲兩個DNA短串的腳本。作爲輸出,我連接兩個字符串字符串,然後在連接字符串的末尾打印第二個串在其副本上的字符串。例如:如果輸入字符串是AAAA和TTTTT然後打印:爲什麼不是Perl的tr ///做我想要的?

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; 
+0

這是隻是格式不正確或Perl的語法格式實際上是這樣嗎? – 2009-04-28 15:25:50

+0

不是「$ DNA1 =〜s/\ r?\ n?$ //;」與「chomp $ DNA1」相同? – 2009-04-28 15:28:44

+0

是「$ DNA1 =〜s/\ r?\ n?$ //;」與「chomp $ DNA」相同,但是perl 4和更低版本不支持chomp,因此它是一種替代方案,而且我的機器安裝了perl 4 – shubster 2009-04-28 15:31:10

回答

1

你TR改變任何ACTGatcg和刪除它們。我想你想

$DNA3 =~ tr/atcgATCG/ /; 
1

你需要把一個空間,在tr命令下半年。

另外,似乎你想要做的是創建一個包含,因爲是第一個字符串中的字符儘可能多的空間變量:

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

這可能只是一個簡單的語法錯誤。請嘗試:

$DNA3 =~ tr/ATCGatcg/ /; 

其中第二個斜槓分隔兩個翻譯實體,並且第二個和第三個斜槓之間有一個空格字符。

祝你好運!

編輯:我的錯誤 - 誤解了你想做的事。回答相應調整:)

0

這是您要的程序嗎?

 
#!perl 

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

print 
    $s1, $s2, "\n", 
    ' ' x length($s1), $s2, "\n"; 
相關問題