perl子程序中硬引用的用法?

perl子程序中硬引用的用法?,第1张

sub sum{

my $test = shift#根据上下文这里是去一个标量, ($a) = @_试图从数组里面取一个标量

my $total=0

foreach(@$test){

$total=$total+$_

}

return $total

}

sub choose(){

my (@c1, @c2, @c3)

@c1 = @_

@c2 = sort @_

@c3 = reverse @_

return (\@c1,\@c2,\@c3)

}

my @arr = (1,2,3,5,4)

my (@a,@b,@c)

my @refs = &choose(@arr)

@a = @{$refs[0]}

@b = @{$refs[1]}

@c = @{$refs[2]}

print "@a\n@b\n@c\n"

说明:首先perl中只能对简单的列表赋值给变量列表,而不能,列表赋值给列表组成的列表,比如@arr = (1,2,3)这个是可以的,($a,$b) = ($b, $a)这个也对, 但是(@arr1, @arr2) = (@arr2, @arr1)这个就错了,原因在于perl的列表是贪婪的, 也就是说 @arr1会尽可能的接受后面的数据,而(@arr2,@arr1)本身就是一个大的列表, 就全部被@arr1接受了,而@arr2为空,唯一的办法就是用变量形式来接受具体数据。所以($ref_a1, $ref_a2) = (\@a1, \@a2)这种形式是可以的。

可能你要学习一下 perl中的引用了,类似于c语言中的指针和c++中的引用;接着上面的例子, 要用数组@a1, 只要写成 @{ $ref_a1 } 就相当于@a1了,要取第一个元素,$a1[0] , ${ $ref_a1 } [0] ,只需要把前面的@改成$就可以了。

#!/usr/bin/perl -w

use strict

sub total{

 my $sum = 0#这里你打成了$num

 foreach (@_){

  $sum += $_

   }

$sum

}

my @fred = (1 .. 1000)

my $fred_total = &total(@fred) #这里也要加my

print $fred_total."\n"


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7818476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存