一個轉換程式,簡單的把DNA序列中的A轉變成T,第一種情況沒有使用私人變數。
複製代碼 代碼如下:#!/bin/perl
#下面是一段DNA序列
$DNA=ATTATATAT;#這裡是我們的序列
$result=A_to_T($DNA);
print "I changed all $DNA A to T, and the we get the result $result\n\n";
sub A_to_T
{
my ($input)=@_;
$DNA=$input;#沒有使用私人變數
$DNA=~s/A/T/g;
return $DNA;
}
結果如下:
F:\>perl\a.pl
I changed all TTTTTTTTT A to T, and the we get the result TTTTTTTTT
F:\>
這裡我們發現$DNA的值變成了TTTTTTTTT,而不是以前ATTATATAT。這是因為在子程式中,我們使用了同樣的$DNA 變數,而在子程式中它的值已經被改變了。所以輸出的時候就是改變以後的值。
下面把子程式中的 $DNA 進行私人變數聲明:
複製代碼 代碼如下:#!/bin/perl
#下面是一段DNA序列
$DNA=ATTATATAT;
$result=A_to_T($DNA);
print "I changed all $DNA A to T, and the we get the result $result\n\n";
sub A_to_T
{
my ($input)=@_;
my $DNA=$input;
$DNA=~s/A/T/g;
return $DNA;
}
結果如下:
F:\>perl\a.pl
I changed all ATTATATAT A to T, and the we get the result TTTTTTTTT
F:\>
這樣就正常了。
當然你可以說,在子程式中可以完全不用$DNA這一個變數,就如同下面一樣:
複製代碼 代碼如下:#!/bin/perl
#下面是一段DNA序列
$DNA=ATTATATAT;
$result=A_to_T($DNA);
print "I changed all $DNA A to T, and the we get the result $result\n\n";
sub A_to_T
{
my ($input)=@_;
$dna_to_change=$input;
$dna_to_change=~s/A/T/g;
return $dan_to_change;
}
得到的也是正常的結果:
F:\>perl\a.pl
I changed all ATTATATAT A to T, and the we get the result
F:\>
但是,沒有人能夠保證你不會一時糊塗,在子程式用了程式中的變數。或者當你第一次使用的時候,可以避免,當你過來幾個月以後回過頭再來使用的時候,就不能保證完全正確了,所以為了代碼的通用性,還是在所有的子程式中使用my私人變數吧。