Perl学习笔记(四)--子程序

定义子程序

  要定义自己的子程序,可使用关键字sub,子程序名(不包含与号)以及用花括号封闭起的代码块,例如:

1 sub marine{
2      $n +=1;  #全局变量 $n
3      Print “Hello,sailor number $n \n”;
4 }

  子程序不需要事先声明

  子程序的定义是全局的,不存在私有子程序

  假如定义两个重名的子程序,后面的子程序会覆盖掉前面的那个

调用子程序

1 &marine;

返回值

  子程序中最后一次运算的结果都会被自动当成子程序的返回值

参数

  要传递参数列表到子程序里,只要在子程序调用的后面加上被括号圈引的列表表达式就行了,例如:  

1 $n = &max(10,15);

子程序中的私有变量

  默认情况,perl里面所有的变量都是全局变量,可以借助my操作符来创建私有变量,我们称之为词法变量

1  sub max{
2      my($m,$n);                #该语句块中的新私有变量
3     ($m,$n) = @_;          #将参数赋值给变量
4      If($m>$n){$m}else{$n}
5  }

改进的&max子程序

 1 $maxinum=$max(3,5,10,4,6);
 2 Sub max{
 3     my ($max_so_far) = shift @_;                   #数组中的第一个值,暂时把它当成最大值
 4     foreach(@_){                                        # 遍历数组@_中的其他元素
 5      if($_>$max_so_far){                  # 当前元素比$max_so_far更大吗
 6          $max_so_far = $_;
 7      }
 8     }
 9     $max_so_far;
10 }

use strict编译指令

   更严谨的代码和编译风格

return操作符

  立即停止执行子程序并返回某个值

时间: 2024-08-08 19:52:01

Perl学习笔记(四)--子程序的相关文章

Perl 学习笔记-子程序

1.定义子程序 使用sub关键字定义 ;   子程序名和标识符同要求, 但是有的特殊的可以用 &符号;  子程序是全局的, 不需要再使用前声明;  重名函数后者覆盖前者. sub roger{ $n += 1; #全局变量$n print "Hello , sailor number $n!\n"; } &roger # 前面加&来调用, 不过没加好像也能调用. 返回值: 在子程序执行过程中会不断运算, 而最后一次运算的结果(不管是什么)都会被当成子程序的返回值

perl学习笔记四——输入与输出

读取标准输入 用<STDIN>进行标准输入:chomp($line=<STDIN>); 如果读到文件尾,行输入操作符就会返回undef.便可利用这一性质跳出循环. while(defined ($line=<STDIN>)){ print "I saw $line"; } 简写为: while(<STDIN>){ print "I saw $_ ."; } 注意:这个简写只在最早的写法中才能正常运行,如果将行输入操作符

PERL学习笔记---正则表达式的应用

使用m//匹配 //这是m//(模式匹配)的一种简写.同qw//操作一样,可以使用任何成对的分隔符.因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者m,fred,, m!fred!, m^fred^,其它非成对的分隔符也可以 不区分大小写:/i if(/yes/i) {#大小写无关 print “In that case, I recommend that you go bowling.\n”;} 匹配任何字符:/s 默认情况下,点(.)不匹配换行符,这

Caliburn.Micro学习笔记(四)----IHandle&lt;T&gt;实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

NLTK学习笔记(四):自然语言处理的一些算法研究

自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结的自然语言中常用的一些基本算法,算是入个门了. 递归 使用递归速度上会受影响,但是便于理解算法深层嵌套对象.而一些函数式编程语言会将尾递归优化为迭代. 如果要计算n个词有多少种组合方式?按照阶乘定义:n! = n*(n-1)*...*1 def func(wordlist): length = le

Android学习笔记四:添加Source

问题描述 Source not foundThe JAR file D:\.....\sdk\platforms\android-20\android.jar has no source attachment. 问题原因及解决办法 1. 使用SDK Manager下载最新版本的Sources for Android SDK 一般文件下载目录默认在SDK下的sources文件中即 \adt-bundle-windows-x86_64-20130522\sdk\sources\android-20