千家信息网

Perl子程序怎么用

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,小编给大家分享一下Perl子程序怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Perl 子程序(函数)Perl 子程
千家信息网最后更新 2025年01月21日Perl子程序怎么用

小编给大家分享一下Perl子程序怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Perl 子程序(函数)

Perl 子程序(函数)

Perl 子程序也就是用户定义的函数。

Perl 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。

Perl 子程序可以出现在程序的任何地方,语法格式如下:

sub subroutine{   statements;}

调用子程序语法格式:

subroutine(参数列表);

在 Perl 5.0 以下版本调用子程序方法如下:

&subroutine(参数列表);

在新版本上,虽然也支持该调用方法,但不推荐使用。

接下来我们来看一个简单是实例:

实例

#!/usr/bin/perl# 函数定义sub Hello{    print"Hello, World!\n";}# 函数调用Hello();

执行以上程序,输出结果为:

Hello,World!

向子程序传递参数

Perl 子程序可以和其他编程一样接受多个参数,子程序参数使用特殊数组 @_ 标明。

因此子程序第一个参数为 $_[0], 第二个参数为 $_[1], 以此类推。

不论参数是标量型还是数组型的,用户把参数传给子程序时,perl默认按引用的方式调用它们。

实例

#!/usr/bin/perl# 定义求平均值函数subAverage{# 获取所有传入的参数$n = scalar(@_);   $sum = 0;    foreach $item(@_){        $sum += $item;   }   $average = $sum / $n;   print '传入的参数为 : ',"@_\n";           # 打印整个数组   print "第一个参数值为 : $_[0]\n";         # 打印第一个参数   print "传入参数的平均值为 : $average\n";  # 打印平均值} # 调用函数Average(10, 20, 30);

执行以上程序,输出结果为:

传入的参数为:102030第一个参数值为:10传入参数的平均值为:20

用户可以通过改变 @_ 数组中的值来改变相应实际参数的值。

向子程序传递列表

由于 @_ 变量是一个数组,所以它可以向子程序中传递列表。

但如果我们需要传入标量和数组参数时,需要把列表放在最后一个参数上,如下所示:

实例

#!/usr/bin/perl# 定义函数sub PrintList{    my@list = @_;   print"列表为 : @list\n";}$a = 10;@b = (1, 2, 3, 4); # 列表参数PrintList($a, @b);

以上程序将标量和数组合并了,输出结果为:

列表为:101234

我们可以向子程序传入多个数组和哈希,但是在传入多个数组和哈希时,会导致丢失独立的标识。所以我们需要使用引用(下一章节会介绍)来传递。

向子程序传递哈希

当向子程序传递哈希表时,它将复制到 @_ 中,哈希表将被展开为键/值组合的列表。

实例

#!/usr/bin/perl# 方法定义sub PrintHash{    my(%hash) = @_;    foreach my$key(keys %hash){      my$value = $hash{$key};      print"$key : $value\n";   }}%hash = ('name' => 'runoob', 'age' => 3); # 传递哈希PrintHash(%hash);

以上程序执行输出结果为:

age :3name : runoob

子程序返回值

子程序可以向其他编程语言一样使用 return 语句来返回函数值。

如果没有使用 return 语句,则子程序的最后一行语句将作为返回值。

实例

#!/usr/bin/perl# 方法定义sub add_a_b{    # 不使用     return$_[0]+$_[1];       # 使用 return    # return $_[0]+$_[1];  }print add_a_b(1, 2);

以上程序执行输出结果为:

3

子程序中我们可以返回标量,数组和哈希,但是在返回多个数组和哈希时,会导致丢失独立的标识。所以我们需要使用引用(下一章节会介绍)来返回多个数组和函数。

子程序的私有变量

默认情况下,Perl 中所有的变量都是全局变量,这就是说变量在程序的任何地方都可以调用。

如果我们需要设置私有变量,可以使用 my 操作符来设置。

my 操作符用于创建词法作用域变量,通过 my 创建的变量,存活于声明开始的地方,直到闭合作用域的结尾。

闭合作用域指的可以是一对花括号中的区域,可以是一个文件,也可以是一个 if, while, for, foreach, eval字符串。

以下实例演示了如何声明一个或多个私有变量:

sub somefunc {    my $variable;    # $variable 在方法 somefunc() 外不可见    my($another,@an_array,%a_hash);    #  同时声明多个变量}

实例

#!/usr/bin/perl# 全局变量$string = "Hello, World!"; # 函数定义sub PrintHello{    # PrintHello 函数的私有变量    my$string    $string = "Hello, Runoob!";   print"函数内字符串:$string\n";}# 调用函数PrintHello();print"函数外字符串:$string\n";

以上程序执行输出结果为:

函数内字符串:Hello,Runoob!函数外字符串:Hello,World!

变量的临时赋值

我们可以使用 local 为全局变量提供临时的值,在退出作用域后将原来的值还回去。

local 定义的变量不存在于主程序中,但存在于该子程序和该子程序调用的子程序中。定义时可以给其赋值,如:

实例

#!/usr/bin/perl# 全局变量$string = "Hello, World!"; sub PrintRunoob{    # PrintHello 函数私有变量    local$string;    $string = "Hello, Runoob!"    # 子程序调用的子程序    PrintMe();    print"PrintRunoob 函数内字符串值:$string\n";}subPrintMe{    print"PrintMe 函数内字符串值:$string\n";}subPrintHello{    print"PrintHello 函数内字符串值:$string\n";}# 函数调用PrintRunoob();PrintHello();print"函数外部字符串值:$string\n";

以上程序执行输出结果为:

PrintMe函数内字符串值:Hello,Runoob!PrintRunoob函数内字符串值:Hello,Runoob!PrintHello函数内字符串值:Hello,World!函数外部字符串值:Hello,World!

静态变量

state操作符功能类似于C里面的static修饰符,state关键字将局部变量变得持久。

state也是词法变量,所以只在定义该变量的词法作用域中有效,举个例子:

实例

#!/usr/bin/perluse feature'state'; subPrintCount{    state $count = 0; # 初始化变量    print"counter 值为:$count\n";    $count++;}for(1..5){    PrintCount();}

以上程序执行输出结果为:

counter 值为:0counter 值为:1counter 值为:2counter 值为:3counter 值为:4

注1:state仅能创建闭合作用域为子程序内部的变量。

注2:state是从Perl 5.9.4开始引入的,所以使用前必须加上 use。

注3:state可以声明标量、数组、哈希。但在声明数组和哈希时,不能对其初始化(至少Perl 5.14不支持)。

子程序调用上下文

子程序调用过程中,会根据上下文来返回不同类型的值,比如以下 localtime() 子程序,在标量上下文返回字符串,在列表上下文返回列表:

实例

#!/usr/bin/perl# 标量上下文my$datestring = localtime(time);print $datestring; print "\n"; # 列表上下文($sec,$min,$hour,$mday,$mon, $year,$wday,$yday,$isdst) = localtime(time);printf("%d-%d-%d %d:%d:%d",$year+1990,$mon+1,$mday,$hour,$min,$sec); print"\n";

以上程序执行输出结果为:

SunJun1215:58:0920162106-6-1215:58:9

以上是"Perl子程序怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

子程序 函数 变量 参数 字符 字符串 数组 程序 实例 哈希 结果 输出 多个 标量 上下 上下文 作用 方法 私有 全局 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 销售软件开发票时选什么商品类别 微信付款账单显示服务器异常 杨浦区信息软件开发厂家价格 通信网络安全的主要内容 教师网络安全法 svn服务器密码管理工具 网络安全儿童画线描 火影忍者服务器为什么这么卡 学校监控服务器本地安装 比较两数据库字段plsql 模块服务器 服务器故障排除 魔兽世界旧世界数据库 1.在数据库中存储的是 数据库中的手机号是什么类型 意识形态网络安全讲座主持词 在数据库中数据的物理结果 区块链为什么不能淘汰数据库 国家网络安全人才培育中心项目 服务器 被管理员关闭了 国外网络安全教材 服务器管理口可以连接pxe吗 广东嵌入式软件开发服务费 论软件开发过程 网络安全的规范性文件有哪些 计算机网络技术1500字 四川网络安全指挥中心 计算机应用及网络技术 开发 重要的服务器安全防护 网络安全法哪年开始的
0