Perl函数参数的传递 和 函数参数中多个数组怎么传递
答案:1 悬赏:0 手机版
解决时间 2021-02-09 03:51
- 提问者网友:城市野鹿
- 2021-02-08 05:30
Perl函数参数的传递 和 函数参数中多个数组怎么传递
最佳答案
- 五星知识达人网友:何以畏孤独
- 2021-02-08 07:09
首先来个基本函数参数的传递
sub hello { print "Hello @_" }
hello ("World!", "I am Robot" ) ; # 打印出 Hello World! I am Robot这里值得留意的就是 @_ 就是装载所有传入的参数的数组 ( 看好了, 这其实是数组啊!! )
所以, 将上面的改一下, 就可以:
sub hello { print "Hello $_[0]" }
hello ("World!", "I am Robot" ) ; # 打印出 Hello World!这次, 我不打印 @_, 而只取第一个元素, 所以会写成 $_[0].
又因为传入时都是数组的关系, 所以 :
sub 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' ), 它们都堆在一起了
要做到可以区分出来数组做参数, 我们要用"引用"了!
sub 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 了
sub hello { print "Hello @_" }
hello ("World!", "I am Robot" ) ; # 打印出 Hello World! I am Robot这里值得留意的就是 @_ 就是装载所有传入的参数的数组 ( 看好了, 这其实是数组啊!! )
所以, 将上面的改一下, 就可以:
sub hello { print "Hello $_[0]" }
hello ("World!", "I am Robot" ) ; # 打印出 Hello World!这次, 我不打印 @_, 而只取第一个元素, 所以会写成 $_[0].
又因为传入时都是数组的关系, 所以 :
sub 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' ), 它们都堆在一起了
要做到可以区分出来数组做参数, 我们要用"引用"了!
sub 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 了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯