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私有变量吧。


猜你喜欢
- 网上一直说的是先安装SQL Server 2014,再安装VS2015,软件就不会出现问题。我这次在什么都没准备的情况下安装了VS2015,
- 基于很多原因,有不少朋友的空间不支持FSO,当大量的页面生成静态页面时,占用大量的空间,修改样式时,不方便,所以动态页面还是有动态页面的好处
- Guide to the Section 508 Standards for Electronic and Information Tech
- golang用来序列化的模块有很多,我们来介绍3个。json首先登场的是json,这个几乎毋庸置疑。序列化package mainimpor
- 目录一、 环境准备:1.docker环境2.安装mariadb数据库二、ORM1.ORM简介2.django配置数据库第一种方式:第二种方式
- Python有一个不错的3D引擎——UrsinaUrsina官网:www.ursinaengine.
- DROP FUNCTION IF EXISTS `getPY`; DELIMITER ;; CREATE FUNCTION `getPY`(
- 发现问题python嵌套列表大家应该都不陌生,但最近遇到了一个问题,这是工作中遇到的一个坑,首先看一下问题raw_list = [[&quo
- PySide是一个免费的软件,与PyQt不同之处在于使用了LGPL,允许PySide免费的开发商业软件。 PySide有15个模块。这些模块
- 前言对于JavaScript程序的调试,相比于alert(),使用console.log()是一种更好的方式,原因在于:alert()函数会
- 代码如下: var lishustr = "qwertyuiopasdfghjklmnbvcxz"; var s = l
- 前言之前有人提了一个需求,我一看此需求用正则表达式最合适不过。考虑到之前每次使用正则表达式,都是临时抱佛脚,于是这次我就一边完成任务一边系统
- 最近一直在更新Java新特性和IDEA Tips两个专栏,其他方向内容的动态关注少了。昨天天晚上刷推的时候,瞄到了这个神奇的东西,觉得挺co
- scatter绘画散点图代码如下:import matplotlib.pyplot as pltplt.scatter(x,y,
- mssql 的正式名字是 SQL Server MS公司出的。图形操作界面好一些,性能还可以。在在mssql和oracle上不能互换.支持O
- 1、查看数据库中有哪些用户? select username from all_users;2、查看数据库中有哪些DBA用户? select
- Java 使用Sqllite 数据库如何生成db文件 &n
- Pandas 处理数据的效率还是很优秀的,相对于大规模的数据集只要掌握好正确的方法,就能让在数据处理时间上节省很多很多的时间。Pandas
- 本文实例讲述了python输出指定月份日历的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/pythonimport c
- 您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ?我们先抛开 g