Perl的子程序(二)
在Perl中可以自己创建子程序(Subroutine):
关键字sub,子程序名以及用花括号封闭起来的代码块。
sub marine { ... }
子程序名与标量的命名空间是不同的两个部分。
子程序的返回值:最后一次运算的表达式即是默认的返回值。也可以用return来显式的返回,这样之后的语句不会执行。
在标量上下文返回的会是标量,在列表上下文返回的也是列表。
子程序中的参数:子程序内部可以使用@_,$_[0],$_[1],$_[2],,,这样的变量来表示。@_变量是子程序私有变量,递归调用时,不会出错。
在子程序调用时,在子程序名后用括号括住的列表表达式。
$n = &max(10,15); #10后被送到$_[0],15被送到$_[1],@_=(10,15),在标量上下文值为2;
子程序私有变量定义: my关键字来声明词法变量(lexical variable)。 my($m,$n) = @_; #创建私有变量并赋值。
不仅可以定义在子程序中,还可以定义在if, while, foreach中。
只能用来声明单个标量/变量,列表/数组。 my $fred, $barney; #错误,第二个变量无法声明。
持久性私有变量: 用关键字state来声明,在子程序的多次调用中保留变量之前的值。作用域仍然是只存在于子程序内部。
sub marine {state $n=0; $n+=1; print; }
也可以用来声明数组和哈希类型。 state @number。
子程序的调用:子程序可以通过 (&+子程序名)的方式来调用。
如果编译器之前看到过子程序的定义,那么可以不加&,而直接调用子程序。
如果Perl可以通过语法规则直接判断它只能是子程序调用,那么也可以省略 &。
也就是说只要你将参数列表放进括号内,就一定是子程序调用。
use strict; #强制要求使用一些严格的,良好的编程风格。
Perl的子程序(二)的更多相关文章
- Perl的子程序
子程序(subroutine) perl中的子程序其实就是自定义函数.它使用sub关键字开头,表示声明一个子程序 子程序名称有独立的名称空间,不会和其它名称冲突 Perl中的子程序中可以定义.引用.修 ...
- Perl处理数据(二):tr和y///
tr和y///是等价的.用来实现一一映射,但也有额外的功能,就像Linux下的tr命令一样. 用法: tr/SEARCH/REPLACEMENT/cdsr y/SEARCH/REPLACEMENT/c ...
- perl学习笔记二
数组: 特殊的数组索引:加入对索引值超过数组尾端的元素进行赋值,数组将会根据需要自动扩大,只要有可用的内存分配给数组.意外增加的数组元素的值为undef. $a[0]="aa"; ...
- perl中foreach(二)
本文和大家重点讨论一下Perl foreach命令的用法,Perl foreach循环中控制变量的值会被Perl自动保存和恢复.当循环进行时,是没有办法改变其值的.循环结束时,变量的值会回到循环开始前 ...
- Perl入门(二)Perl的流程控制
Perl是一种粘性语言,如果你有其他语言的基础的话,你会发现他的流程控制完全和你所知的一模一样. 简单说一下他们的区别: Perl的elsif在其他语言里头可能表示为else if Perl的last ...
- perl学习(二)正则表达式
模式分组: /fred+/会匹配freddd这样的 /(fred)+/会匹配fredfredfred这样的 /(fred)*/则会匹配abcdef任意的 圆括号同时也使得重新使用某些字符串成为可能.反 ...
- Perl系列文章
0.Perl书籍推荐 Perl书籍下载 密码:kkqx 下面是一些我学习Perl过程中读过完整的或部分章节的觉得好的书. 入门级别1:<Perl语言入门>即小骆驼 入门级别2:<In ...
- perl模块
查看perl模块安装目录:find `perl -e ‘print “@INC”‘` -name ‘*.pm’ -print 为什么要写或要模块呢?简言之:代码重用,更多见于写一组工具集,有很多地方是 ...
- perl语言书籍教程推荐
互动出版网计算机频道.为您推荐关于perl语言的书籍教程.包括perl push.perl chomp以及perl python等perl语言内容. perl语言书籍一.<Perl语言编程 第四 ...
随机推荐
- docker 参数
-a, --attach=[] Attach to STDIN, STDOUT or STDERR 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项 --add-host= ...
- 关于VMware虚拟机磁盘收缩的几种方法
VMware虚拟机在使用过程中,随着软件和数据的增多,虚拟磁盘占用的硬盘空间会逐渐增大,但删除数据后,却不会自动减小占用的物理硬盘空间 而是继续占用相应大小.如果需要解决上面的问题,就需要收缩wmwa ...
- RabbitMQ服务端配置详解(转自:http://www.cnblogs.com/zhen-rh/p/6884297.html)
RabbitMQ支持三种配置方式: 1) 读取环境变量中配置, 这包括shell中环境变量和rabbitmq-env.conf/rabbitmq-env-conf.bat文件中配置的环境变量 可配置如 ...
- thinkCMF----如何写标签
ThinkCMF写标签的地方:
- vue之介绍
vue的作者叫尤雨溪,中国人.自认为很牛逼的人物,也是我的崇拜之神. 关于他本人的认知,希望大家读一下这篇关于他的文章,或许你会对语言,技术,产生浓厚的兴趣.https://mp.weixin.qq. ...
- js遍历json对象
原生js遍历json对象 遍历json对象: 无规律: <script> var json = [ {dd:'SB',AA:'东东',re1:123}, {cccc:'dd',lk:'1q ...
- <input type=file>上传唯一控件
值得注意的是:当一个表单里面包含这个上传元素的时候,表单的enctype必须指定为multipart/form-data,method必须指定为post,浏览器才会认识并正确执行.但是还有一点,浏览器 ...
- opengl学习笔记(四):openCV读入图片,openGL实现纹理贴图
在opengl中实现三维物体的纹理贴图的第一步就是要读入图片,然后指定该图片为纹理图片. 首先利用opencv的cvLoadImage函数把图像读入到内存中 img = cvLoadImage(); ...
- Elasticsearch 过滤器
序 本文主要记录es的查询过滤的使用. 使用过滤器 过滤器不影响评分,而评分计算让搜索变得复杂,而且需要CPU资源,因而尽量使用过滤器,而且过滤器容易被缓存,进一步提升查询的整体性能. post_fi ...
- os.stat(filename).st_size 文件信息
os.path.getsize(i) py36\Lib\genericpath.py def getsize(filename): """Return the size ...