第一章 数据引用与匿名存储
来源:互联网 发布:mac betterzip 注册码 编辑:程序博客网 时间:2024/05/16 05:53
zjzc01:/root/perl# cat a1.pl
print “\@line is @line\n”;
zjzc01:/root/perl# perl a1.pl
$line[19] is hello
@line is hello
创建一个数组元素:
这样就创建了一个第20个元素:
你可以通过在已有的Perl变量名前添加”\” 来创建对它的引用,例如:
创建若干变量:
zjzc01:/root/perl# cat a2.pl
创建若干变量
$a = “mama mia”;
@array = (10,20,30);
%hash = (“laurel” => “hardy”, “nick” => “nora”);
现在创建对它们的引用
#
ra = \$ra; ###ra 现在引用(“指向”) $a
$rarray = \@array;
$rhash = \%hash;
print “$ra is $ra\n”;
print “$rarray is $rarray\n”;
print “\rhash is rhash\n”;
zjzc01:/root/perl# perl a2.plra is REF(0xaac4d0)
$rarray is ARRAY(0xaac380)
hash is HASH(0xaac410)
引用本身就是一种标量变量:
间接访问:
间接访问(dereference)
在C语言中,如果p是一个指针,那么*p 就表示p所指向的值。在Perl中如果$r是一个引用,
那么$$r,@$r或%$r分别是根据$r所引用的数据类型(标量变量,数组,散列表)获取的相应的值。
根据所引用的数据类型来选择使用正确的前缀是关键。
如果
zjzc01:/root/perl# cat a3.pl
zjzc01:/root/perl# cat a3.pl
$a += 2;
print “\$a is $a\n”;
zjzc01:/root/perl# perl a3.pl
$a is 2
$SCALAR(0x21c2308) is 4
对数组的引用:
你可以用三种方式使用普通数组:
1.将数组作为一个整体进行存取,使用记号@array.例如,你可以打印整个数组或向其中添加元素
2.使用记号
3.使用记号@array[index1,index2,….] 来分段(slice)存取数组中的元素
@array=(1,2,3);
print “\@array is @array\n”;
$array = \@array;
push (@array ,4,5);
print “\@array is @array\n”;
print “
对散列表的引用:
对散列表的引用同样直接了当:
zjzc01:/root/perl# cat a5.pl
%hash=(“a”=>1,”b”=>2,”c=”=>3);
print %hash;
print “\n”;
$rhash = \%hash;
print $hash{“a”};
print $$rhash{“a”};
zjzc01:/root/perl# perl a5.pl
a1c=3b2
11zjzc01:/root/perl#
简明的箭头记号:
Perl 提供了另一种简单易读的用以存取数据和散列表元素的语法结构: “->[]”
记号。例如, 如果给出了数组的引用,你可以这样来获取数组中的第2个元素:
4zjzc01:/root/perl# cat a6.pl
@array=(1,4,7);
$rarray = \@array;
print
zjzc01:/root/perl# perl a6.pl
4
4zjzc01:/root/perl#
以前的访问方式为 $$rarray[1],现在是$rarray->[1]
与数组类似,你可以通过使用->{}记号来存取散列表中的数据元素:
向子例程传递数组和散列表:
当你要向子例程中传递一个以上的数组或散列时,Perl 将会把它们合并到@_数据中供子例程使用。
唯一避免合并的方法就是传递数组或散列表的引用。下面是一个将一个数组中的元素与另一个数组中对应元素相加的例子:
数据元素累加:
zjzc01:/root/perl# cat a7.pl
@array1 = (1,2,3); @array2 =(4,5,6,7);
AddArrays (\@array1,\@array2); ##以引用方式传递数组
print “\@array1 is @array1\n”;
print “\@array2 is @array2\n”;
sub AddArrays
{
my (
for (
}
}
zjzc01:/root/perl# perl a7.pl
@array1 is 5 7 9 7
@array2 is 4 5 6 7
匿名存储的引用:
到目前为止, 我们学习创建了对已存在的变量的引用,现在我们要学习对”匿名”数据结构的引用,
也就是那些没有同变量名关联的值。
创建匿名数组,需要使用方括号而不是圆括号:
$ra = []; ###创建一个空的匿名数组,并返回对它的引用
$ra = [1,”hello”]; ##创建一个经过初始化的匿名数组,并返回对它的引用:
匿名数组使用[];
数据元素解引用:
zjzc01:/root/perl# cat a8.pl
print “
print “$$ra[2]\n”;
zjzc01:/root/perl#
zjzc01:/root/perl# perl a8.pl
$ARRAY(0x217ed48) is 1 2 3 heelo
1
2
3
匿名散列使用{}代替:
hash数组元素解引用:
zjzc01:/root/perl# cat a9.pl
rh = {}; ##创建一个空的散列并返回对它的引用rh = {“k1”,”v1”,”k2”,”v2”};##一个经过初始化的匿名散列
print “11111111\n”;
print %
zjzc01:/root/perl# perl a9.pl
11111111
k2v2k1v1222222222
v1zjzc01:/root/perl#
这是一个普通的使用%前缀的散列表,它是有圆括号所包围的列表初始化:
zjzc01:/root/perl# cat a10.pl
%hash=(“flock” => “birds”,”pride” => “lions”);
print “$hash{‘flock’} is hash{‘flock’} \n”;
zjzc01:/root/perl# perl a10.plhash{‘flock’} is birds
匿名散列表是一组大括号括起来的列表
该表达式的结果是一个标量变量,值为指向散列表的引用:
zjzc01:/root/perl# cat a11.pl
$rhash = {“flock” => “birds”,”pride” => “lions”};
print “$$rhash{‘flock’} is
zjzc01:/root/perl# perl a11.pl
zjzc01:/root/perl# cat a12.pl
{
my
};
print “$a is $a\n”;
print “$$ra is
zjzc01:/root/perl# perl a12.pl
$a is
my 操作符可以将一个变量置为私有变量(用Perl的航华就是,局部化).你也可以使用操作符”local”,
但是它们之间有一种微妙却十分重要的差异.
这样,
但是由于
多重引用的间接访问:
$a = 10;
ra = \$a; ###引用指向a的值
rra = \$ra;###指向引用a值的引用的引用
$rra= \$rra; ###引用的引用的引用……..
引用的查询:
ref 函数被用来查询标量变量是否包含一个引用,是的话,再判定所指向的是什么数据类型。
如果ref的参数包含的是数字或字符串,就返回false(这是一个布尔值,不是字符串),若是引用,
就会返回代表所指的数据类型的字符串:
zjzc01:/root/perl# cat a13.pl
if (ref(
zjzc01:/root/perl# perl a13.pl
22222
- 第一章 数据引用与匿名存储
- 第一章 数据引用与匿名存储
- <1>数据引用与匿名存储
- 第<1>章 数据引用与匿名存储
- 大量数据的存储与引用
- mysql存储过程与函数-----第一章
- Java中数据存储方式、栈机制与引用的关系
- MVC中使用Tuple完成匿名类数据存储
- 基础------数据存储、对象引用、static关键字
- 编程原则 《数据机构与程序设计》 第一章
- 数据结构预算法学习-第一章(数据与数据结构)
- 数据挖掘概念与技术 第一章 引论
- Android[中级教程]第一章 数据存储之Shared Preferences
- 数据存储与传输
- 数据存储与ContentProvider
- #数据存储与访问
- 数据存储与检索
- 数据存储与访问
- php多维数组
- ocp-208
- nodejs中exports与module.exports的实践
- Struts2原理解析(结合源码)
- Android高效加载大图、多图解决方案,有效避免程序OOM
- 第一章 数据引用与匿名存储
- httpwatch抓包工具的使用方法
- ocp-209
- Linux进程间通信方式
- socket编程:简单的多客户端聊天室
- iOS APP安全杂谈
- LSGO软件技术团队2015~2016学年第三周(0914~0920)总结
- 创建版本库
- YII 开启URL伪静态方法(yii中urlManager匹配和注意点)