设为首页 收藏本站
查看: 634|回复: 0

[经验分享] perl 函数参数传递与返回值(一)

[复制链接]

尚未签到

发表于 2015-12-26 09:22:59 | 显示全部楼层 |阅读模式
  1.参数传递
  普通模式:参数中没有数组和哈希
  



#!/usr/bin/perl -w
use strict;
sub getparameter
{
my $i;
for( $i=0;$i<=$#_;$i++)
        {
print "It's the ";
print $i+1;
print " parameter:$_[$i]\n";
}
}
  
  无论参数有多少个,均能正常传递。
  调用函数
  &getparameter($first,$second .. $end)
  文艺模式:参数中包含数组
  还是这个函数,只不过我们传递的参数里包括一个数组



#!/usr/bin/perl -w
use strict;
sub getparameter
{
my $i;
for( $i=0;$i<=$#_;$i++)
        {
print "It's the ";
print $i+1;
print " parameter:$_[$i]\n";
}
}
my @array=("this","is","a","test");
my $variable="this is another test";
#&getparameter(@array,$variable);
&getparameter($variable,@array);
  当我们只传入2个参数,一个数组,一个变量,结果是这样 ,变成了5个参数。无论数组在前还是在后,都是显示5个参数。 由此 @_ 会把数组每一个值当做一个参数储存。那我的疑问是perl能否正确的把传递的数组还原成数组而不是单个变量???
  It's the 1 parameter:this is another test
It's the 2 parameter:this
It's the 3 parameter:is
It's the 4 parameter:a
It's the 5 parameter:test
  那我们换一种方式接受参数:



#!/usr/bin/perl -w
use strict;
sub getparameter
{
(my @arr,my $var)=@_;
print  "It's the 1 parameter:@arr\n";
print "It's the 2 parameter:$var\n";
}
my @array=("this","is","a","test");
my $variable="this is another test";
&getparameter(@array,$variable);
  结果令人意外,$variable传递的参数丢失, 同时数组却取得所有参数,相当于把变量归为数组的一个元素。per了接受传递来的数组,会贪婪的把变量变成数组的元素。所以在接受参数传递赋值时,不要把数组放前面。
  It's the 1 parameter:this is a test this is another test
Use of uninitialized value in concatenation (.) or string at test2.pl line 7.
It's the 2 parameter:
  改成这样就好了:
  
  



#!/usr/bin/perl -w
use strict;
sub getparameter
{
(my $var,my @arr)=@_;
print "It's the 1 parameter:$var\n";
print  "Ti's the 2 parameter:@arr\n";
}
my @array=("this","is","a","test");
my $variable="this is another test";
#&getparameter(@array,$variable);
&getparameter($variable,@array);
  运行结果:
  
  It's the 1 parameter:this is another test
Ti's the 2 parameter:this is a test
  
  
  如果要传递2个数组怎么办???
  可以采用引用的方式



#!/usr/bin/perl -w
use strict;
sub getparameter
{
(my $arr1,my $arr2)=@_;
print "It's the 1 parameter:@$arr1\n";
print  "Ti's the 2 parameter:@$arr2\n";
}
my @array1=("this","is","a","test");
my @array2=qw/this is another test/;
#&getparameter(@array,$variable);
&getparameter(\@array1,\@array2);
  per了使用引用是在变量或数组前加\ ,相当于地址传递
  所以运行结果是:
  It's the 1 parameter:this is a test
Ti's the 2 parameter:this is another test
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156421-1-1.html 上篇帖子: perl中的q,qq,qw,qr,qx 下篇帖子: Perl 中的 s/// 操作符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表