为了账号安全,请及时绑定邮箱和手机立即绑定

如何在perl子函数中传递参数?

如何在perl子函数中传递参数?

森栏 2019-03-05 14:06:02
如何在perl子函数中传递参数
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

sub test { my %hash = @_; print "$_ => $hash{$_}$/" foreach keys %hash;}my %h = ( A => 100, B => 200, C => 300 );test(%h);

查看完整回答
反对 回复 2019-03-30
?
侃侃无极

TA贡献2051条经验 获得超10个赞

首先来个基本函数参数的传递

12sub hello {  print "Hello @_" }hello ("World!""I am Robot" ) ; # 打印出 Hello World! I am Robot

这里值得留意的就是 @_ 就是装载所有传入的参数的数组 ( 看好了, 这其实是数组啊!! )

所以, 将上面的改一下, 就可以:

12sub hello {  print "Hello $_[0]" }hello ("World!""I am Robot" ) ; # 打印出 Hello World!

这次, 我不打印 @_, 而只取第一个元素, 所以会写成 $_[0].

又因为传入时都是数组的关系, 所以 :

123456789sub printArray {  my @x $_[0];  my @y $_[1];  print "X: @x$/";  print "Y: @y$/";}@x = ( 1..5 );@y = ( 'a'..'f') ;printArray ( @x@y ) ; # 输出竟然是 1 2!!

这样是行不通的, 因为对 @_ 来说, 传入的参数其实只是 ( 1..5, 'a'..'f' ), 它们都堆在一起了

要做到可以区分出来数组做参数, 我们要用"引用"了!

123456789101112sub printArray {  my @x = @{$_[0]}; # 这个叫 de-reference, 反引用  my @y = @{$_[1]};  print "X: @x$/";  print "Y: @y$/";}@x = ( 1..5 );@y = ( 'a'..'f') ;printArray ( \@x, \@y ) ; # 这个叫 reference, 将数组变成引用传入# 这次的输出是# X: 1 2 3 4 5# Y: a b c d e f

所谓引用, 其实就相当於 c 的 pointer (姑且这麼理解吧!) 实际上传入的就是一个记忆体地址而已, 当反引用时, perl 就会知道这是一个数组, 於是就可以赋值回等号左边的 @x 和 @y 了


查看完整回答
反对 回复 2019-03-30
  • 3 回答
  • 0 关注
  • 1123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信