首页 > 编程语言 >perl学习笔记13_引用

perl学习笔记13_引用

时间:2023-07-17 14:47:31浏览次数:48  
标签:13 a0 ref 笔记 perl item 引用 print my

目录

内容来源: https://www.runoob.com/perl/perl-database-access.html

1. 说明

Perl引用是一个标量类型可以指向变量, 数组, 哈希表, 甚至子程序,
可以应用在程序的任何地方.

2. 创建引用

my $ref_scalar = \$foo      ; # 标量引用
my $ref_array  = \@ARGV     ; # 列表引用
my $ref_hash   = \%ENV      ; # 哈希引用
my $ref_code   = \&handler  ; # 子过程引用
my $ref_glob   = \*foo      ; # GLOB句柄引用

匿名引用(直接创建对数组或哈希的引用, 不使用变量名):

# 使用方括号创建对数组的匿名引用
# (使用圆括号得到的是数组)
my $ref_a0 = [1, "foo", 2];
my $ref_a1 = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];

# 使用花括号创建对哈希的匿名引用
# (使用圆括号得到的是hash)
my $ref_h = {a=>4, b=>8};

# 创建对sub的匿名引用
my $ref_code = sub {print "1234"};

3. 解引用(取消引用)

是"创建引用"的逆过程, 即把被引用的内容(标量, 数组, 哈希等)从引用中恢复出来.
需要在引用变量前面加 $, @, %.

#标量解引用
my $var = 10;
my $ref_var = \$var;
print("var = ${$ref_var}\n"); # var=10

#数组解引用
my @a0 = (1, 2, 3);
my $ref_a0 = \@a0;
print("a0=@{$ref_a0}"); # a0=1 2 3

#哈希解引用
my %h0 = (key0=>10, key1=>20, key2=>30);
my $ref_h0 = \%h0;
foreach my $k (keys %{$ref_h0}){
    print("$k : ${$ref_h0}{$k}\n");
}
# key2 : 30
# key1 : 20
# key0 : 10

如果不确定引用对应的变量类型, 可以使用ref来判断,
会返回: SCALAR, ARRAY, HASH, CODE, GLOB, REF.
如果不属于这些, 会返回false.

my $ref_a = [1, 2, 3];
printf("ref_a的引用类型为: %s\n", ref($ref_a)); # ARRAY

4. 引用函数

#定义函数
sub print_hash{
    my (%hash) = @_;
    foreach my $item (%hash){ #这样会把key和value都当做item遍历.
        print("item=$item\n");
    }
}

#创建对函数的引用
$ref_code = \&print_hash;

#通过引用调用函数
%h = (name=>"Jim", age=>4,);
&{$ref_code}(%h);
# item=name
# item=Jim
# item=age
# item=4

标签:13,a0,ref,笔记,perl,item,引用,print,my
From: https://www.cnblogs.com/gaiqingfeng/p/17560032.html

相关文章

  • Rust 学习笔记:快速上手篇
    Rust学习笔记:快速上手篇这篇学习笔记将用于记录本人在快速上手Rust编程语言时所记录的学习心得与代码实例。为此,我会在本笔记库项目的Programming/LanguageStudy/目录下创建一个名为Rust的目录,并在该目录下设置以下两个子目录:QuickStart目录用于存放Markdown格式的笔记。......
  • Windows 必备的 13个 CMD 命令,学会了约美女同事去….. 有事半功倍的效果!
    MSG/server:192.168.1.101*"小美,下班后一起去吃饭呐,我是办公室里大壮!"TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRussianChineseTraditionalIndonesianS......
  • 关于记笔记的迷思
    迷思一:每年都会有一些高考状元的笔记,或者985的笔记在卖,和这些学霸比起来似乎记笔记是一项非常重要的技能,如果记不好笔记,笔记不美观那么你似乎拿不了高分。迷思二:有很多记笔记的软件,Typora,Notion,Obsidian等等仿佛不会其中一种你的生产力就不行。关于这些问题问了chatgpt,我问了cha......
  • Asp-Net-Core学习笔记:单元测试和集成测试
    前言我在使用AspNetCore的这段时间内,看了很多开源项目和博客,发现各种.Net体系的新技术很多人都有关注和使用,但却很少有人关注测试。测试是软件生命周期中的一个非常重要的阶段,对于保证软件的可靠性具有极其重要的意义。在应用程序的开发过程中,为了确保它的功能与预期一致,必......
  • perl学习笔记12_字符串处理
    目录substr,rindex,取出最后一个斜线之后的所有内容:#说明:#rindex($a,"/")+1,表示从$a中找出最后一个"/"出现的位置(index);#位置值加1,表示最后一个"/"出现的位置之后的index;#substr($a,index),只有index参数,没有long参数,表示一直取值到字串......
  • 【笔记整理】请求携带cookie的两种方法
    """方法一:在请求头header中携带Cookie请求头信息(因为本身Cookie就是用请求头传递的....)方法二:使用cookie参数传递cookie字典"""fromhttp.cookiejarimportCookieimportrequests.utilsfromrequests.cookiesimportRequestsCookieJarifname=='main':#方法一:......
  • “Win10笔记本开热点,手机连不上”的解决方案
    1、打开WLAN和热点开关;2、网络和Internet设置->网络和共享中心:可以看到2个活动网络,一个是”以太网“(可以连接网线上网),另外一个是热点(名字类似于”本地连接*2“不能上网)。3、进入”以太网“的属性->共享->Internet连接网络:勾选”允许其他网络用户通过此计算机的Internet连接来......
  • 【笔记整理】使用Session会话保持
    importrequestsif__name__=='__main__':#Session对象实现了客户端和服务器端的每次会话保持功能。session=requests.Session()resp=session.get("http://www.baidu.com")#使用Session会自动携带cookie每次请求后的cookieresp2=session.g......
  • Perl学习笔记7_数字处理
    数字处理目录1.cell/floor(向上/向下取整)1.cell/floor(向上/向下取整)usePOSIXqw(ceilfloor);#向上取整printceil(5.5);#6printceil(6);#6printceil(6.1);#7printceil(6.5);#7#向下取整printfloor(5.5);#5printfloor(6);#6printfloor(......
  • [笔记]组成原理_计算机系统概述
    计算机系统的层次结构硬件和软件系统共同构成了一个完整的计算机系统。冯·诺依曼机的基本思想——“存储程序”其特点如下:采用存储程序的工作方式。计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备五大部件组成。指令和数据以同等地位存储在存储器中,形式上没......