美文网首页
Perl子程序(函数)和引用

Perl子程序(函数)和引用

作者: Amy1234567 | 来源:发表于2020-04-18 16:37 被阅读0次

    Perl子程序(函数)

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

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

    sub subroutine{

      statements;

    }

    调用子程序语法格式: subroutine( 参数列表 );

    在Perl5.0以下版本调用子程序方法如下:&subroutine( 参数列表 );

    向子程序传递参数

    Perl子程序可以和其他编程一样接受多个参数,子程序参数使用特殊数组@_表明。因此子程序第一个参数为$_[0], 第二个参数为$_[1],以此类推。

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

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

    向子程序传递列表

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

    但如果需要传入标量和数组参数时,需要把列表放在最后一个参数上。我们可以向子程序传入多个数组和哈希,但是在传入多个数组和哈希时,会导致丢失独立的标识。所以我们需要使用引用。

    向子程序传递哈希

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

    子程序返回值

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

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

    子程序的私有变量

    默认情况下,Perl中所有的变量都是全局变量,也就是说变量在程序的任何地方都可以调用。如果需要设置私有变量,可以使用my操作符来设置。

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

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

    实例:

    实例

    变量的临时赋值

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

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

    实例

    静态变量

    state操作符功能类似于static修饰符,state关键字将局部变量变得持久。state也是词法变量,所以只在定义该变量 的词法作用域中有效。

    实例

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

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

    3. state可以声明标量,数组,哈希。但在声明数组 和哈希时,不能对它初始化。

    子程序调用上下文

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

    Perl引用

    引用就是指针,Perl引用是一个标量类型可以指向变量,数组,哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方。

    创建引用

    定义变量的时候,在变量名前面加个\,就得到了这个变量的引用

    实例

    在数组中我们可以用匿名数组引用,使用 [] 定义:

    $aref= [ 1,"foo",undef,13 ];

    匿名数组的元素仍然可以是匿名数组,所以我们可以用这种方法构造数组的数组,可以构造任意维度的数组。

    my $aref = [

            [1, 2, 3],

            [4, 5, 6],

            [7, 8, 9],

    ]

    在哈希中我们可以用匿名哈希引用,使用 {} 定义:

    $href= { APR =>4, AUG =>8 };

    我们也可以创建一个没有子程序名的匿名子程序引用:

    $coderef = sub { print "W3CSchool!\n" };

    取消引用

    取消应用可以根据不同的类型使用 $, @ 或 % 来取消

    实例:

    实例

    如果不能确定变量类型,可以使用ref来判断,返回列表如下:

    实例:

    循环引用

    循环引用在两个引用相互包含时出现。需要小心使用,不然会导致内存泄漏

    实例

    引用函数

    函数引用格式:\&

    调用引用函数格式: & + 创建的引用名

    实例

    相关文章

      网友评论

          本文标题:Perl子程序(函数)和引用

          本文链接:https://www.haomeiwen.com/subject/nytvvhtx.html