Perl_Pop和Push操作
2009年09月24日 星期四 10:41 A.M.

可以使用新的,更大的索引(index)将新值存放在数组的末尾。但实际上,Perl 程序员不使用索引

因此,在下面几段中, 我们将介绍几种不使用索引来操作数组的方法。

当然,我们是在开玩笑,但这个玩笑基于 Perl 的一些事实。数组中使用索引并没有发挥 Perl 的威力。如果使用 pop,  push  和类似的操作 
符以避免使用索引,那你的程序通常会比大量使用索引的情况要快,而且能避免  "差一位(off-by-one)"类型的错误,这类错误通常叫做  "边 
界值错误"。有时,一个初级的 Perl  程序员(想比较 Perl 和 C 的速度)将针对 C 优化过的排序程序(有大量的索引操作),用 Perl 来直 
接实现(从而有大量的索引操作),惊讶于它为什么如此慢。答案是,"用小提琴来订钉子不是一个好办法"。

通常将数组类似于栈来使用,在其右边添加或者删除数据。(这是数组中"最后"一个元素,其索引最大)。这些操作经常 
出现,因此提供了特殊的函数。

pop 操作将数组的最后一个元素取出并返回:

@array=5..9; 
$fred=pop(@array);      #$fred 得到 9,@array  现在为(5,6,7,8) 
$barney=pop@array;    #$barneygets8,@array  现在为(5,6,7)
pop@array;            #@array  现在为(5,6)(7 被丢弃了)
最后一个例子中,pop 使用在"inavoidcontext",也就是说没有存放其返回值的地方。这样使用 pop 是合法的。

如果数组为空,那 pop 什么也不做(因为没有元素可以移出),并返回 undef。

你可能已注意到 pop 后可以使用或者不使用括号。这在 Perl 中是一条通用规则:如果去掉括号含义不变,那括号就是可选 的。和 pop 相反的操作是 push,它可以将一个元素(或者一列元素)加在数组的末尾:
受过相应教育的人将发现,这是同义反复。 
push(@array,0);                            #@array 现在为(5,6,0)  
push@array,8;                                #@array  现在为(5,6,0,8) 
push@array,1..10;                         #@array 现在多了 10 个元素         
@others=qw/9    0    2    1    0/; 
push@array,@others;                          #@array 现在又多了 5 个元素(共有 19 个)

转载于:https://www.cnblogs.com/dulalaqiuzhi/archive/2009/10/20/1587023.html

perl pop和push函数,不使用索引更能利用perl的特性,减少边界值错误发生的几率...相关推荐

  1. c语言中push函数pop函数用法,perl中pop与push函数

    pop 操作将数组的最后一个元素取出并返回: @array=5..9; $fred=pop(@array);      #$fred 得到 9,@array 现在为(5,6,7,8) $barney= ...

  2. JavaScript数组函数unshift、shift、pop、push使用实例

    一.unshift 在数组第一个元素前插入元素 // 使用unshift在数组第一个元素前插入元素 // 返回数组长度 var tmp = ['a','b']; var len = tmp.unshi ...

  3. push c语言什么作用,“c语言”中,“pop函数”和“push函数”的作用分别是什么?...

    这个算是数据结构的内容讲解的是一个叫做栈类型的数据结构,这个数据结构的特点就是后进先出--最后放进去的数据最先拿出来.pop函数就是拿出数据的操作,push是放入是数据的操作. 内容拓展: pop函数 ...

  4. perl学习之:函数总结

    一.进程处理函数 1.进程启动函数 函数名 eval 调用语法 eval(string) 解说 将string看作Perl语句执行. 正确执行后,系统变量$@为空串,如果有错误,$@中为错误信息. 例 ...

  5. pandas使用query函数基于组合索引筛选dataframe的数据行(与and、或or、非not)

    pandas使用query函数基于组合索引筛选dataframe的数据行(与and.或or.非not) 目录 pandas使用query函数基于组合索引筛选dataframe的数据行(与and.或or ...

  6. pandas使用reindex函数为日期索引中有缺失日期的dataframe进行索引重置(所有日期都连续)、并使用fill_value参数为行进行默认填充

    pandas使用reindex函数为日期索引中有缺失日期的dataframe进行索引重置(所有日期都连续).并使用fill_value参数为行进行默认填充(add the missing date i ...

  7. pandas使用pd.MultiIndex.from_product函数和pd.MultiIndex.from_tuples函数创建复合索引dataframe数据实战

    pandas使用pd.MultiIndex.from_product函数和pd.MultiIndex.from_tuples函数创建复合索引dataframe数据实战 目录 pandas使用pd.Mu ...

  8. mysql的count()函数如何选择索引,千万级表的count()查询优化实例

    文章目录 一.前言 1.网上的主要两种说法 2.不贴出mysql版本的测试都是耍流氓~ 3.mysql的count(*)和count(1) 二.测试索引长度和索引基数对count(*)查询的影响 1. ...

  9. C++ push_back()和back() 、pop()、push()、emplace() 和 emplace_back()

    1 push_back()和back() 2 push_back()和pop_back( ) 3 push()和pop() 4 emplace() 和 emplace_back() 1 push_ba ...

最新文章

  1. 和12岁小同志搞创客开发:设计一款亮度可调节灯
  2. PAT 1052. 卖个萌 (20)
  3. ubuntu16.04安装ROS
  4. netty Demo
  5. [ubuntu]deb软件源
  6. hive 2.1.1 mysql_Hive2.1.1集群搭建
  7. 用python写一个简单的爬虫_用Python从零开始写一个简单爬虫
  8. 弹出页面,弹出框,$(‘‘).modal({});模态框
  9. 利用泛型与反射更新实体(ADO.NET Entity Framework)
  10. 欧拉工程第74题:Digit factorial chains
  11. Cobbler结合windows DHCP服务器的使用
  12. 软件测试-测试用例的经典例子
  13. 使用Git的Kdiff3解决合并冲突 显示乱码的问题
  14. 移动OA,颠覆企业传统助力办公更高效
  15. Git Bash 下进行快速复制粘贴
  16. .\Obj\Template.axf: error: L6002U: Could not open file .\obj\core_cm3.o: No such file or directory
  17. pdf文件如何生成目录 wps_wps制作pdf文档的详细方法
  18. h5页面判断移动端是iPhone还是安卓 ,或者是微信浏览器,或者是iPad
  19. mysql统计信息_mysql收集统计信息
  20. 1秒计算机格式,嫌修改文件格式麻烦?教你写个简单的bat文件一秒修改格式

热门文章

  1. 北斗导航 | Satellite Communications Toolbox——MATLAB2021a卫星通信工具箱(附代码)
  2. 安装php报错误2356,linux下Mysql+php5+apache安装手记
  3. php.ini在哪里 微赞_Php.ini文件位置在哪里 Php.ini文件找不到
  4. linux tar压缩包目录,如何在Linux上使用tar命令解压和压缩文件
  5. ubuntu 上网总结
  6. 英语语法---介词短语详解
  7. carsim的学习笔记2——test specifications
  8. 重新定义智能平板电脑 第四范式与联想达成战略合作
  9. 【Python基础】超级详解系列-Python列表全面解析
  10. 【数据竞赛】2020年11月国内大数据竞赛信息-奖池5000万