千家信息网

Perl子程序怎么用

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,小编给大家分享一下Perl子程序怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Perl 子程序(函数)Perl 子程
千家信息网最后更新 2024年11月22日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安全错误 数据库的锁怎样保障安全 ghost能够克隆服务器吗 中国高科技互联网发展史 易信网络技术开发有限公司 肥东县软件开发培训机构 为什么要导入数据库和模块 网络安全为人民的材料 济宁睿付网络技术公司 上海汽车控制器底层控制软件开发 朝阳数据库数据脱敏 昆明海关网络安全科长 微信小程序数据库要钱吗 es数据库计算文档相似度 饥荒自建服务器管理员代码 怎样找服务器 数据库ip地址连接不了 技术标包含哪些内容软件开发 南京冠邦网络技术有限公司 论文收录数据库 软件开发的模型的作用 怎么对数据库的某一列操作 玄武区一站式软件开发经验丰富 易普达远程服务器端 如何建立动态数据库 天津综合软件开发发展现状 软件开发怎么添加工程 公安部网络安全设备名录 关于数据库的特点的是什么 大连设计软件开发 数据库 小数点后16位 计算机网络技术专业枯燥吗
0