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

所属分类: 脚本专栏 / perl 阅读数: 305
收藏 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语法中Perl运算符的概念,Perl语言中Perl运算符有很多值得学习的地方,这里和大家分享一下它的概念和用法
收藏 0 赞 0 分享

Perl语法中Perl运算符用法指南

本文和大家重点讨论一下Perl语法中Perl运算符的概念和用法,主要包括算术运算符,位运算符,赋值运算符和表运算符等内容,希望本文的介绍你对你有所帮助
收藏 0 赞 0 分享

Perl语法之解析Perl变量使用

Perl语言有很多值得学习的地方,你对Perl语法中的变量是否熟悉,Perl变量分为标量变量,数组变量,联系关系数组变量3类
收藏 0 赞 0 分享

构造函数中Perl方法用法介绍

本文和大家重点讨论一下Perl方法的概念,Perl方法定义不提供任何特殊语法,但规定Perl方法的第一个参数为对象或其被引用的包。Perl有两种Perl方法:静态Perl方法和虚Perl方法
收藏 0 赞 0 分享

Perl文件句柄详解

本文介绍一下Perl文件句柄的概念,要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将Perl文件句柄在内存中的地址和要拷贝的字节数传送给操作系统
收藏 0 赞 0 分享

perl中srand()与time的函数使用方法介绍

这篇文章主要介绍了perl中srand与time函数的使用,需要的朋友可以参考下
收藏 0 赞 0 分享

用perl实现生物突变的随机模拟程序代码

perl写的生物突变的随机模拟程序,有需要的朋友可以参考下
收藏 0 赞 0 分享

perl 变量 $/ 的用法解析 上下文为行模式时,$/ 定义以什么来区分行

默认状态下,很显然都是用\n来区分行,\n也被我们称作为换行符。当读取序列时,按行来读取时,就是以换行符为标准
收藏 0 赞 0 分享

perl写的一个随机编故事的程序(rand随机函数)

用perl写的一个随机编故事的程序,用到了rand随机函数,注释也很详细,需要的朋友可以参考下
收藏 0 赞 0 分享

perl实现的两个文件对比并对数据进行筛选的脚本代码

对比两个文件并对数据进行筛选的perl脚本,涉及到哈希的应用和perl编程风格的改变。有需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多