一個(gè)轉(zhuǎn)換程序,簡(jiǎn)單的把DNA序列中的A轉(zhuǎn)變成T,第一種情況沒(méi)有使用私有變量。
復(fù)制代碼 代碼如下:
#!/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;#沒(méi)有使用私有變量
$DNA=~s/A/T/g;
return $DNA;
}
結(jié)果如下:
F:\&;perl\a.pl
I changed all TTTTTTTTT A to T, and the we get the result TTTTTTTTT
F:\&;
這里我們發(fā)現(xiàn)$DNA的值變成了TTTTTTTTT,而不是以前ATTATATAT。這是因?yàn)樵谧映绦蛑?,我們使用了同樣?DNA 變量,而在子程序中它的值已經(jīng)被改變了。所以輸出的時(shí)候就是改變以后的值。
下面把子程序中的 $DNA 進(jìn)行私有變量聲明:
復(fù)制代碼 代碼如下:
#!/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;
}
結(jié)果如下:
F:\&;perl\a.pl
I changed all ATTATATAT A to T, and the we get the result TTTTTTTTT
F:\&;
這樣就正常了。
當(dāng)然你可以說(shuō),在子程序中可以完全不用$DNA這一個(gè)變量,就如同下面一樣:
復(fù)制代碼 代碼如下:
#!/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;
}
得到的也是正常的結(jié)果:
F:\&;perl\a.pl
I changed all ATTATATAT A to T, and the we get the result
F:\&;
但是,沒(méi)有人能夠保證你不會(huì)一時(shí)糊涂,在子程序用了程序中的變量?;蛘弋?dāng)你第一次使用的時(shí)候,可以避免,當(dāng)你過(guò)來(lái)幾個(gè)月以后回過(guò)頭再來(lái)使用的時(shí)候,就不能保證完全正確了,所以為了代碼的通用性,還是在所有的子程序中使用my私有變量吧。