`

Pel中的引用及匿名散列

    博客分类:
  • Perl
 
阅读更多

引用,在 perl 里是很有用的,特别是高级、复杂的编程,与 OO 风格的编程中,经常用到。
如果你的 匿名散列与引用使用得比较概念清楚,正确使用的话,可以省很多事


下面是一个命名散名



my %personal_info = (
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
);


要注意哟,上面的赋值是 () 用括号


用起来很简单,比较好的方法是用以下方法


print " my name is $personal_info{'name'} \n";


接着就是一个引用,对散列的引用
说明一下,引用,其实就像 c 语言里的指针,是一个标量,存放的是一个内存地址,这个地址存着引用对像。
比如说一个散列的引用,其实就是这个散列的开始地址,这个地址直接保存着引用的散列。




my $personal_info_ref = \%personal_info;

引用就是这么简单,在变量 ( 标量,数组,散列) 前加 \ 就行了。



为了使用这个引用指向的散列数据,可以这样使用
方法之一


my $tsingson_name = $$personal_info_ref{'name'};


你可以这样得到这是不是一个散列的引用



print ref $personal_info_ref;


当然,比较推荐的用法是第二个 ,就是小箭头用法


my $tsingson_name = $personal_info_ref->{'name'};


下面的代码,可以看这个引用是什么类型,当然结果是打印出 HASH
就是引用的是散列


print ref $personal_info_ref;



接着我们看一个匿名散列,其实匿名散列,就是没有命名的散列表。
我们用引用来作例子。



my $personal_ref = {
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
};


注意哟,上面是 {} 花括号哟
这一段代码是等于上面代码的合成,在 {} 里就是匿名散名,可以看作以下代码的简化


my %personal = (
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
); ######## 这里是小括号

my $perlsonal_ref = \%personal; #### 这里就是引用


对比一下上面的代码,你可以知道匿名散列与引用,可以简化代码,使用小箭头也可以清楚使用数据了。

#############################################################################################

看看一个实际代码吧,是一个函数调用



$usertable->add({
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
});


可能见过这样的代码吧,呵呵,这里传递给函数的,就是一个 匿名散列的引用。

上面的代码,也就是相当于下面的代码



my $personal_ref =
{
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
};

$usertable->add($personal_ref);




my %personal =
(
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
);

my $personal_ref = \%personal;

$usertable->add($personal_ref);


#######################################################
这里就有一个技巧在,就是使用引用来传递散列表给函数

我们看看这们函数内是如何使用的



package Personal;
use strict;

sub add {
my $self = shift;
my $personal_ref = shift;

if (ref $personal_ref eq 'HASH')
{
my $name = $personal_ref->{'name'};
}

return;
}


kao, 为什么这样啊,看起来很烦嘛
这里,使用 散列引用,是为了代码更为清楚准确,因为散列表可以清楚知道变量是什么,对于将来维护与排错,增加功能或信息都很方便。

比如加一个国家属性,只要在 散列表里加




Code

my $personal_ref =
{
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
state => 'china', ###### 看,加在这里了
};

$usertable->add($personal_ref); #### 这里还是没变


看看函数里修改的地方



package Personal;
use strict;

sub add {
my $self = shift;
my $personal_ref = shift;

if (ref $personal_ref eq 'HASH')
{
my $name = $personal_ref->{'name'};
if ( exists $personal_ref->{'state'} ) ############## 代码加在这里了
{
print $personal_ref->{'state'}; ############## 处理
}
}

return;
}

分享到:
评论

相关推荐

    pel脚本爬虫程序,支持爬取 dfe day imdb

    pel脚本爬虫程序,支持爬取 dfe day imdbpel脚本爬虫程序,支持爬取 dfe day imdb

    PHPExif库PEL.zip

    PEL 可以修改 Exif 数据(读和写),也可以添加新的 Exif 数据到图像中。PEL 是完全使用 PHP 编写的,除了 PHP 5 标准库,不依赖于其他库。特性: 支持 JPEG 和 TIFF 图像(读和解析) 可以修改所有 Exif 标签 ...

    AEMC_CA_PEL10x_pvcell_

    在光伏行业中,"pel"可能指的是"PhotoElectric Effect"(光电效应)或者"Photovoltaic Energy Laboratory"(光伏能源实验室)的缩写。"10x"可能是型号的一部分,可能代表该设备的系列或性能等级。 光伏电池(PV ...

    EBMA.rar_EBMA_Half and Half_Half-pel_ebma_half

    标题中的“EBMA.rar_EBMA_Half and Half_Half-pel_ebma_half”指的是一个关于EBMA(Error Concealment by Block Motion Adaptation,块运动适应错误隐藏)算法的压缩包,其中包含了对整像素EBMA和半像素EBMA的详细...

    AEMC_CA_PEL10x_pvcell_源码.zip

    描述中同样提到"AEMC_CA_PEL10x_pvcell_源码.zip",这确认了这是一个关于光伏电池建模的源代码库,很可能是一个用于模拟或分析光伏电池性能的软件。PEL10x可能是该模型的一个系列或版本号,专门针对光伏电池的某些...

    EBMA.zip_EBMA_Half-pel_ebma_half_plus

    标题中的“EBMA.zip_EBMA_Half-pel_ebma_half_plus”指的是一个压缩文件,其中包含了关于EBMA(Extended Block Motion Arithmetic)算法在处理半像素(half-pel)时的一些增强技术,特别是“ebma_half_plus”。...

    Speedrite S500 MK2、S1000 PEL S500、Stafix 集成太阳能充电器用户指南

    根据给定文件的部分内容,本指南主要介绍了Speedrite S500 MK2、S1000 PEL S500、S1000 Stafix S500等型号集成太阳能充电器的使用方法及相关安全注意事项。这些设备作为高效、环保的围栏充电解决方案,在畜牧业及...

    Pelectron:使用电子完成PEL

    **Pelectron: 使用Electron构建PEL应用** `Pelectron`是一个基于`Electron`框架的项目,旨在帮助开发者利用TypeScript语言构建PEL(Personal Electronic Library)应用程序。`Electron`是一个流行的开源库,它允许...

    PEL: PHP Exif Library-开源

    项目已移至:https://github.com/lsolesen/pel/ PHP Exif库(PEL)提供了一个使用纯面向对象PHP5编写的易于使用的库,该库可让您读取和写入Exif标记通常在用w拍摄的JPEG和TIFF照片中找到

    PEL_Tetris:“ PEL”类的Tetris项目

    在C++中,类是实现OOP的核心元素,而"PEL"可能代表项目的特定命名约定或者开发者的姓名缩写。 1. **面向对象编程**:在C++中,类是数据结构和函数的集合,它们封装在一起以创建自定义的数据类型。在这个项目中,...

    李斯特菌检验测试片-PEL

    俗话说国以民为本,民以食为天,食品的生产、安全、质量均需要相应的食品资料知识累积与制定,相信这一份...该文档为李斯特菌检验测试片-PEL,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看

    pel:PHP Exif库-使用PHP在JPEG和TIFF文件中读写Exif标头的库

    描述PHP Exif库(PEL)使开发易于读取和写入JPEG和TIFF图像中的Exif元数据标头的程序变得容易。 请参阅文件INSTALL,以获取有关您的应用程序如何使用PEL的介绍。 PEL是完全用PHP 5编写的库,这意味着它在PHP核心之外...

    pel:Emacs实用环境库

    PEL-Emacs的实用环境库 厌倦了编写Emacs配置代码? :exploding_head: 是否曾宣布? :anxious_face_with_sweat: 不想花时间编写Emacs Lisp代码吗? :flushed_face: 是否想学习Emacs并尝试一些内置和外部软件包? :...

    TeknikensHus:TeknikensHus Ar pel

    "Ar pel"在瑞典语中可以理解为"年度项目"或"年度比赛",暗示这可能是一个年度举行的科技活动或竞赛。 【描述】中仅有的"Tyk尼克斯·胡斯(TeknikensHus) TeknikensHus Ar pel"看起来像是重复的表述,没有提供额外...

    Buscar canciones y películas-crx插件

    【buscar_canciones_y_películas.crx】插件是一款专为西班牙语用户设计的浏览器扩展程序,旨在帮助用户更方便地搜索和获取电影、电视剧和歌曲资源。这款插件通过对默认搜索引擎的调整,提供了免费查找和访问多媒体...

    EBMA.rar_EBMA matlab_Half-pel EBMA_ebma算法 matlab_目标追踪_目标追踪算法

    基于整像素和半像素的EBMA算法实现,用于目标追踪

    耐热果胶裂解酶基因pel9A的克隆和表达 (2006年)

    利用PCR技术从耐热梭状芽孢杆菌(Clostridiumstercorarium)中扩增得到产耐热果胶裂解酶的结构基因pel9A,并将其克隆于表达载体pET28a中,最后将此重组质粒转化到受体茵E。coliBL-21中进行表达。诱导条件为:37℃...

    3M 判读手册 PEL环境李斯特菌检测测试片

    3M 判读手册 PEL环境李斯特菌检测测试片是一份整理发布的食品资料文档,只为你能够轻松获取3M...该文档为3M 判读手册 PEL环境李斯特菌检测测试片,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看

    holamon:prova del连接器pel gitHub de TiddlyWiki

    标题 "holamon:prova del连接器pel gitHub de TiddlyWiki" 指向的是一个关于TiddlyWiki的GitHub连接器的测试项目,其中"holamon"可能是项目或开发者的名字。描述中的内容与标题一致,进一步确认了这是针对...

Global site tag (gtag.js) - Google Analytics