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

时间:2023-08-10 18:13:49 

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

标签:子程序,变量私有
0
投稿

猜你喜欢

  • 用 Python 定义 Schema 并生成 Parquet 文件详情

    2021-09-24 14:14:18
  • 如何使用Python对Excel表格进行拼接合并

    2021-03-15 18:01:54
  • Python自定义聚合函数merge与transform区别详解

    2022-09-14 11:45:30
  • 元素层叠级别及z-index剖析

    2008-07-22 12:03:00
  • Python通过递归函数输出嵌套列表元素

    2021-03-23 15:36:09
  • CentOS6.8使用cmake安装MySQL5.7.18

    2024-01-27 06:00:06
  • 利用Python实现斐波那契数列的方法实例

    2022-11-07 11:20:14
  • 修改数据库为多用户模式

    2024-01-19 13:53:56
  • SqlServer创建自动收缩事务日志任务的图文教程

    2024-01-23 23:44:40
  • MySQL学习笔记4:完整性约束限制字段

    2024-01-27 15:54:29
  • python中的字典详细介绍

    2021-06-08 23:10:41
  • C# SQLite数据库入门使用说明

    2024-01-25 20:01:20
  • MySQL索引查询limit offset及排序order by用法

    2024-01-20 19:55:53
  • 用C#对ADO.NET数据库完成简单操作的方法

    2024-01-15 09:12:58
  • 浅谈如何使用Python控制手机(二)

    2022-05-01 20:16:28
  • sql 附加数据库后,孤立用户的解决办法

    2011-01-22 13:46:00
  • js阻止浏览器默认行为的简单实例

    2024-04-27 15:22:55
  • MsSql 存储过程分页代码 [收集多篇]

    2024-01-13 13:13:33
  • Python遍历numpy数组的实例

    2021-08-30 08:49:37
  • 如何解决AJAX中跨域访问出现'没有权限'的错误

    2008-09-11 17:20:00
  • asp之家 网络编程 m.aspxhome.com