perl函数中的传引用用法
来源:互联网 发布:mac边充电边用好吗 编辑:程序博客网 时间:2024/05/16 14:50
自己的代码
sub insHash{
my $filenm=@_[0];
my $ref_hash_field=@_[1];
open(INFILE, "<$filenm" )||die("can't open describe/$filenm \n");
while ( $line=<INFILE>) {
my @field_all=split(/\s+/,$line);
my $field_type=@field_all[1];
my $field_nm=@field_all[2];
my $field_len=@field_all[3];
#将字段名、类型、长度记录到hash中
my %hash_tmp=("type"=>"$field_type","len"=>"$field_len");
$$ref_hash_field{"$field_nm"}="1";
}
close(INFILE);
#while(($key,$value)=each%ref_hash_field){
# print "$key $value\n";
#}
}
insHash($tmp_filenm_src_2,\%hash_field_src);
perl中的是如何在函数中使用引用参数的。有时不想返回数组或者其他形式,希望直接修改函数的参数的实例的具体的值,作为返回,就C中的传递引用参数一样。
这样在perl中是怎么写的呢? 查了一下文档,perl中的引用应该是通过”\“ 来写的,就像C中&操作符取地址一样。
所以你写
$var1= \$var2 ;
就创建了一个名字$var1的引用,引用的是$var2; 有了引用你就可以修改原有的变量的值了,但还要通过的一个类似c中的* 操作符的 "$"符号,表示对引用再取值,所以当
$$var1="11111" ;
这样的语句的到执行的时候,$var2的值就被修改了。不过注意的是如果你使用的是数组的引用,像这样:
$var1= \@var2 ;
那么你等会要获取$var1指向的数组,应该写 @$var1 这样了。
知道了perl的引用语法,所以想传引用的话,就可以像下面的myFunc1 那样写就行了。
但我们又知道在子过程中@_ 这个数组其实也是指向具体的参数的实例的,不是参数的拷贝。
所以你在函数里面写$var1 = \$_[0];的时候其实也是获得了参数的引用。所以就可以写出
myFunc2那样的函数,注意传给myFunc2的参数没有加上\ 来表示引用了。不过竟然@_ 就可以直接
返问参数的原有实例了,那么我们直接给他赋值不就行了吗,我们还需要引用干什么呢,就像myFunc3做的那样。它直接修改了参数的第一个参数的值,也达到了c中传引用的效果啦。
perl这个东西真是难用,语法奇怪的很!!!
--------------------------------
my $var1 ='0000000';
sub myFunc1{
my $var1 = shift;
#print "var1 = $$var1\n";
$$var1 = "1111111";
}
sub myFunc2{
my $var1 = \$_[0];
#print "var1 = $$var1\n";
$$var1 = "2222222";
}
sub myFunc3{
$_[0] = "33333";
}
print "var1 = $var1\n";
myFunc1(\$var1);
print "var1 = $var1\n";
myFunc2($var1);
print "var1 = $var1\n";
myFunc3($var1);
print "var1 = $var1\n";
------------------------------
运行后输出:
var1 = 0000000
var1 = 1111111
var1 = 2222222
var1 = 33333
- perl函数中的传引用用法
- [Perl系列—] 2. Perl 中的引用用法
- Perl 引用变量传入函数中的行为
- Perl--函数引用
- Perl中的直接引用
- Perl中的“引用”
- perl中的引用
- Perl中的引用
- Perl中的向后引用
- Perl split函数用法
- perl中的trim函数
- perl中的函数参数
- Perl 中的localtime函数
- perl中的sleep函数
- perl sort函数的用法
- perl split函数的用法
- perl函数splice的用法
- perl中的命令行开关用法
- 设计递归函数,求出并输出 Fibnacci 序列
- 13周项目1-递归求奇数连乘的积
- WPF连接SQL数据库,将TextBox中填写的数据插入数据库中,并更新DataGrid表
- Struts2标签<s:iterator>中使用Map
- Tomcat内存的增减
- perl函数中的传引用用法
- JETTY
- 修改版:基于上下文的自适应变长编码CAVLC原理与流程
- Linux Shell自定义快捷指令
- uva-299
- Apple iOS MDM开发流程
- libtool动态库版本系统之个人理解
- avax.management.MalformedObjectNameException: Invalid character '' in value part of property ,Oracle
- 《数据结构和Java集合框架第三版》读书笔记(八)二叉搜索树