简述perl的引用(包括标量、数组、hash等数据类型的引用)
来源:互联网 发布:如何使用数据透视表 编辑:程序博客网 时间:2024/05/17 01:55
- perl的引用
- 数组的解引用
- 二维数组的引用
- hash哈希又叫散列的引用
perl的引用,类似C语言的指针;意义都是指向一个内存空间的地址。比如下述例子中,脚本输出的信息SCALAR(0x7836d0)代表标量数据的存储地址;ARRAY(0x93d6d0)代表数组数据的存储地址。
引用一般会包含“定义引用”,“解引用”两个步骤。“定义引用”是为数据定义内存地址;“解引用”是取内存地址里的数据。
引用的变量是标量类型,那么解引用就必须用标量符号$;
引用的变量是数组类型,那么解引用就必须用数组符号@;
引用的变量是散列类型,那么解引用就必须用散列符号%;
….
总之,解引用和定义引用的数据类型,要保持一致。
另外,解引用的过程中,要关心地址的个数,从而决定是用标量还是数组收集。
perl的引用
qilei@AFAAW-704030720:~/array_2d$ cat 1.pl#!/usr/bin/perluse strict;use warnings;my $value = 10;my $pointer = \$value;print "Pointer Address $pointer of $value \n";print "What Pointer *($pointer) points to $$pointer\n";qilei@AFAAW-704030720:~/array_2d$ ./1.plPointer Address SCALAR(0x7836d0) of 10What Pointer *(SCALAR(0x7836d0)) points to 10qilei@AFAAW-704030720:~/array_2d$
数组的解引用
引用的变量是数组类型,那么解引用就必须用数组符号@。
非数组类型的引用变量同理,即解引用和定义引用的数据类型都要注意保持一致。
qilei@AFAAW-704030720:~/array_2d$ cat 2.pl#!/usr/bin/perluse strict;use warnings;my @names =(1,2,3);print "$#names\n@names\n";my $address = \@names;sub listem{ my ($list) = @_; print $list."\n"; print (@$list[1],"\n");}&listem(\@names);qilei@AFAAW-704030720:~/array_2d$ ./2.pl21 2 3ARRAY(0x93d6d0)2qilei@AFAAW-704030720:~/array_2d$
二维数组的引用
qilei@AFAAW-704030720:~/array_2d$ cat run.pl#!/usr/bin/perluse strict;use warnings;my @array1=("a1","b1","c1","d1");my @array2=("a2","b2","c2","d2");my @array3=("a3","b3","c3","d3");my @array_2d=(@array1,@array2,@array3);print "@array_2d";print "\n";print "$array_2d[1]";print "\n";################@array_2d=(\@array1,\@array2,\@array3);print "@array_2d";print "\n";print "$array_2d[1]";print "\n";print "$array_2d[1][1]";print "\n";qilei@AFAAW-704030720:~/array_2d$ ./run.pla1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3b1ARRAY(0x175a6e0) ARRAY(0x175a788) ARRAY(0x175a878)ARRAY(0x175a788)b2qilei@AFAAW-704030720:~/array_2d$
hash(哈希,又叫散列)的引用
hash数据类型,不能直接用print "%var"
去打印。究其原因,个人暂时理解为,hash数据存储方式与标量数组不一样,是key和value组合在一起的;所以不能直接打印。此时用Data::Dumper package打印hash数据,方便阅读。
但是,通过实践发现,print %var;也可以打印hash数据,但是格式不好看,不容易阅读。
qilei@AFAAW-704030720:~/array_2d$ cat 3.pl#!/usr/bin/perluse strict;use warnings;use Data::Dumper;my %parameters=("p1"=>"xx1", "p2"=>"xx2", "p3"=>"xx3");print %parameters;print "\n";print Dumper(\%parameters);print "\n";print "$parameters{p2}";print "\n";my $address = \%parameters;print Dumper($address);print "\n";print %$address;print "\n";print $$address{p3};print "\n";qilei@AFAAW-704030720:~/array_2d$ ./3.plp3xx3p1xx1p2xx2$VAR1 = { 'p3' => 'xx3', 'p1' => 'xx1', 'p2' => 'xx2' };xx2$VAR1 = { 'p3' => 'xx3', 'p1' => 'xx1', 'p2' => 'xx2' };p3xx3p1xx1p2xx2xx3qilei@AFAAW-704030720:~/array_2d$
0 0
- 简述perl的引用(包括标量、数组、hash等数据类型的引用)
- 标量 ,数组,hash 引用
- 标量 数组 hash 引用
- perl 引用(数组和hash引用)
- Perl 使用引用来访问hash 数组
- 关于Java基本数据类型与引用数据类型的简述
- perl 引用/hash
- perl 引用的例子
- perl的引用<1>
- Perl引用,解引用的对比总结(转)
- java的数据类型(引用数据类型)
- perl 数组引用
- perl 数组的hash表
- Java的引用数据类型
- java的引用数据类型
- 引用数据类型的传递
- 引用数据类型的转换
- java的引用数据类型
- 令仔学Redis(二)----单线程架构
- Adaline神经网络简单介绍和MATLAB简单实现
- 决定开始写blog
- 函数,初等函数
- 2017 Redhat广东省信息安全竞赛 Writeup
- 简述perl的引用(包括标量、数组、hash等数据类型的引用)
- Kubernetes总架构图
- HDMI基本原理
- oracle 12c 新特性之不可见字段
- Java IO流(四) File
- 没有删除的二叉搜索树
- 【复杂网络学习笔记】2:无标度网络的建立
- 二进制与文本
- JAVA定时任务的几种实现