perl子程序的运用及子程序中变量私有(my)声明的重要性

所属分类: 脚本专栏 / perl 阅读数: 297
收藏 0 赞 0 分享

一个转换程序,简单的把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私有变量吧。

更多精彩内容其他人还在看

Perl脚本实现递归遍历目录下的文件

这篇文章主要介绍了Perl脚本实现递归遍历目录下的文件,本文直接给出实现代码,代码中包含明细注释,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl读写文件简单示例

这篇文章主要介绍了Perl读写文件简单示例,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

perl读写文件代码实例

这篇文章主要介绍了perl读写文件代码实例,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

perl中使用signal(信号)实例

这篇文章主要介绍了perl中使用signal(信号)实例,本文讲解了信号的相关知识以,并给出了perl代码实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl的Mail::POP3Client模块和Gmail通信实例

这篇文章主要介绍了Perl的Mail::POP3Client模块和Gmail通信实例,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl中的真与假深入研究

这篇文章主要介绍了Perl中的真与假深入研究,本文详细讲解了Perl中真值与假值的不同,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl List::Util模块使用实例

这篇文章主要介绍了Perl List::Util模块使用实例,本文给出扫描符合条件的某个列表并取出第一个符合条件的、求1到1000之间的和 、求一组数字的最大值与最小值等实用功能代码,需要的朋友可以参考下
收藏 0 赞 0 分享

在EditPlus中配置Perl开发编译环境

这篇文章主要介绍了在EditPlus中配置Perl开发编译环境,配置起来蛮简单,适合小型开发环境,需要的朋友可以参考下
收藏 0 赞 0 分享

讲Perl中的本地时间与UNIX时间戳间相互转换的方法

这篇文章主要介绍了讲Perl中的本地时间与UNIX时间戳间相互转换的方法,主要用到了Perl中的Date::Parse模块,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl数组排序学习笔记

这篇文章主要介绍了Perl数组排序学习笔记,本文讲解了基于ASCII码排序、按字母顺序排列、Perl对数值排序等内容,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多