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语言编程 第四 ...
随机推荐
- Android按钮事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...
- Bulk Convert DOC to DOCX
原文链接 :http://blogs.msdn.com/b/ericwhite/archive/2008/09/19/bulk-convert-doc-to-docx.aspx 帮助文档:http:/ ...
- 关于virgo-tomcat-server-3.6.0.RELEASE配置文件修改说明
Virgo项目Web服务器是EclipseRT项目的一部分,是一个完全模块化的Java运行时. Virgo自身就是设计为在标准OSGi框架实现(Equinox)之上的一个OSGi bundle集合. ...
- python pytest测试框架介绍二
在介绍一中简单介绍了pytest的安装和简单使用,接下来我们就要实际了解pytest了 一.pytest的用例发现规则 pytest可以在不同的函数.包中发现用例,发现的规则如下 文件名以test_开 ...
- Unity3D笔记 英保通五 鼠标事件与GUI系统双击检测
一.如何使用GUI事件来检测鼠标是否按下的事件: 获取当前事件:var e:Event=Event.current: using UnityEngine; using System.Collectio ...
- 重写jquery serialize 方法
/**取表单中的对象 *attrName:为元素的的属性名称不设置则默认为name */ $.fn.serialize = function (attrName) { var ret = {}; if ...
- hadoop命令运行,去除:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform 警告
参照:Hadoop之—— WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... 修 ...
- 敌兵布阵---hud1166(线段树或者树状数组模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 线段树中对某一点的值进行改变: #include<iostream> #includ ...
- Frogger--poj2253
http://poj.org/problem?id=2253 题意:The frog distance (humans also call it minimax distance) between t ...
- vue 中 命名视图的用法
今天主要记录 vue中命名视图的用法 先奉上官网网址:https://router.vuejs.org/zh/guide/essentials/named-views.html 一般情况下,一个页面 ...