In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-18 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/02 Report--
这篇文章主要介绍了Perl如何实现直接引用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
Perl直接引用
Perl中的Perl引用分为Perl直接引用和符号Perl引用,本文只针对Perl直接引用,至于符号Perl引用在以后的文章中会给出解释。
1、一般的标量Perl引用,如:
subadd{ my($a,$b)=@_; $$a++; $$b++; } $a=1; $b=2; add(\$a,\$b); print"$a,$b\n";
输出:2,3。
说明:取变量的Perl引用可以用"\"符号。解Perl引用用"$"符号。
2、数组的Perl引用
数组的Perl引用和标量的Perl引用一样,在数组名前面加"\",只是在解Perl引用的时候,使用@符号。如:
@abc=(1,2,3);
$ref=\@abc;
print"@$ref\n";输出1,2,3。
print"@$ref[0]\n";输出1。
对数组的Perl引用主要用在解决向函数传递若干个数组的问题。在Perl中,如果向函数传递若干个数组,则他们会将这些数组展开到@_数组中,并不能通过@_这个数组来区分传递过来的参数。
如:
subadd{ my(@ref1,@ref2)=@_; print("ref1:@ref1\n"); print("ref2:@ref2\n"); } @a=(1,2,3); @b=(1,2,3); @ret=add(@a,@b);
实际输出的是:ref1:123123
ref2:
可以看到,在子函数add中,并没有区分传递过来的两个参数。那么如何向函数传递多个数组或哈希表呢?
解决的办法是使用数组Perl引用。如下这个例子说明了如何实现:
subadd{ my@result; my($ref1,$ref2)=@_; while(@$ref1&&@$ref2){ unshift@result,pop(@{$ref1})+pop(@{$ref2}); } return@result; } @a=(1,2,3); @b=(1,2,3); @ret=add(\@a,\@b); print"@ret\n";
输出:246
3、对哈希表的Perl引用
和数组类似,但是当解Perl引用时要使用$符号,如:
%hash=(abc=>123,def=>456);
$ref=\%hash;
print"%$ref\n";输出:%HASH(0x83179b4)
print"$$ref{abc}\n";输出:123
4、表的Perl引用
创建表的Perl引用将会把表中的***一个值作为产生的标量:
$reflist=\($a,$b,$c);
print$$reflist."\n";#输出$c的值。
$reflist=\(1,2...30,40);
print$$reflist."\n"#输出40
5、创建匿名数组的Perl引用
$arrayreference=[1,2,3];
print$$arrayreference[0];#输出1
print$arrayreference->[0];#输出1可以用箭头解Perl引用
当用pop从数组中取值时,数组的***个元素会被弹出,但是如果用pop用于匿名数组时,可以实现取值而不影响原有数组,如:
@a=(1,2,3);
$s=pop@{[@a]};#perl作为快来计算@{},而快在计算时将创建对匿名数组的Perl引用。
print"@a\n";#输出123
当反Perl引用数组Perl引用时,该结果将插入到字符串中,如:想实现输出uc函数的返回结果:
print"uc(abc)\n";#输出uc(abc),并不能将abc转换成大写
print"@{[uc(abc)]}\n"#输出ABC,通过数组Perl引用实现大写转换。
可以通过$#$的方式取匿名数组的长度:
$a=[1,2,3,4];
print"$#$a\n";#输出3,(***一个元素的下标)
6、创建匿名哈希表的Perl引用
如:
$hashreference={Name=>Sylvster,Gender=>male};
print$hashreference->{"Name"};#输出Sylvester,等价于:$$hashreference{Name};
如果需要用each遍历哈希表,则:
while(($key,$value)=each(%$hashreference)){}
7、用匿名哈希表模仿用户自定义数据类型
subPoint{
($x,$y)=@_;
return{
x=>$x,
y=>$y
};
}
当使用Point类型时,可以这样做:
$point=Point(10,20);
print"x:$point->{x},y:$point->{y}\n";
8、在perl中创建***范围闭包
例如:
subPoint{ my$string1=shift; returnsub{ my$string2=shift; print("$string1,$string2\n"); }; } $point=Point("Hello"); &$point("World"); &$point("guys");
Point函数返回一个对匿名子函数的Perl引用,变量string1被***的保存在了函数中,每次调用&$point,string1的值没有改变,都是"Hello"。
感谢你能够认真阅读完这篇文章,希望小编分享的"Perl如何实现直接引用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.