perl学习之子例程
1.system function && user function
system fucntion:chomp reverse print...
user function: &+indetifier
2.define a subroutine
sub subroutine_name {
body;
}
eg:sub marine{
$n +=1;
print "Hello,sailor number $n!\n";
}
3.call subroutine
& subroutine_name();
eg:&marine;
4.return value
子例程总是作为表达式的一部分被调用,即使并不需要表达式的结果.
每一个子例程在运行过程中,计算值是它一些列动作的一部分.在子例程中得到的最后一个计算值自动成为返回值.
eg:
sub sum_of_fred_and_barney{
print "Hey,you called the sum of fred and barney subroutine!\n";
$fred + $barney; #这不是真正的返回值
print "Hey,I'm returning a value now!\n";#糟了!!!
}
NOTE: 向子例程增加代码时要确保最后一个表达式的结果是你希望的返回值.
5.arguments
参数列表在子例程运行期间被自动地付给一个特别的数组变量@_.子例程可以访问这个变量以确定参数个数和参数的值.
所以:第一个参数$_[0]
第二个参数$_[1]
NOTE: $_ 与$_[0] $_[1] 完全是两回事,不要混淆了。
如果超出了@_数组范围,你将得到undef,@_变量是子例程的局部变量,总是当前子例程调用的参数列表。
6.subroutine 's private variable
default: perl中所有变量都使全局变量
但可以用my 声明私有变量
eg: sub max {
my($a,$b);
($a,$b) = @_;
if($a>$b) {$a} else {$b} ##不要分号
}
7.可变长参数列表
eg: $maximum = &max(3,5,10,4,6);
sub max {
my($max_so_far) = shift @_;
foreach (@_) {
if ($_ > $max_so_far) {
$max_so_far = $_;
}
}
$max_so_far;
}
参数列表也有可能是空的 eg: $maximum = &max(@numbers); @numbers 有可能为空列表
8.my ---词法变量说明
词法变量的作用域限制在最小的封闭块或文件中。
任何新标量都以空开始------对标量是undef ,对数组是空列表。
9.use strict
use warning
尽量使用
10.return
return 之后的语句不在执行。
11.&
&开头,一定是子例程调用。但函数调用不一定有& ()。
perl的哲学是 没有必要的就不要。
perl学习之子例程的更多相关文章
- perl学习之路1
一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟 ...
- Perl 学习笔记-高级控制结构
1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码; unless(<condition>){code...;} 等价于 if(<con ...
- Perl 学习笔记-标量数据
最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...
- perl学习之:subs函数
在Perl中,sub关键字主要是为了定义一个子例程,那么subs又是什么呢? 首先subs是一个函数,用于预先声明子例程,函数的参数是预声明的函数名列表.那么这个函数存在的意义是什么?首先,通过该函数 ...
- perl学习 之:my local our
范围声明 和全局声明类似,词法范围声明也是在编译时起作用的.和全局声明不同的是,词法范围声明的作用范围是从声明开始到闭合范围的最里层(块,文件,或者 eval--以先到者为准).这也是为什么我们称它为 ...
- perl学习之:use and require
本文和大家重点学习一下Perl use和require用法对比,这两个函数都是一个意思,加载和引用Perl的模块,或者是子程序,区别在于Perl use是在当前默认的里面去寻找,一旦模块不在指定的区域 ...
- perl学习之路3
Perl编程之路3 标签: perl 列表与数组 Perl里面代表复数的就是列表和数组 列表(list)指的是标量的有序集合, 而数组(array)则是存储列表的变量. 在Perl这两个属于尝尝混 ...
- perl学习之路2
这些主要是从 "小骆驼" 书上粘贴或者摘抄出来的, 个人认为需要记的语法知识 "在某些情况下, 你可能需要在一台机器上写程序, 再传送到另一台机器上运行.这时候, 请使用 ...
- perl学习笔记
一.正则表达式 匹配一个文件中的某个单词,并打印出来 #!/usr/bin/perl use strict; use warnings; ; open(FILE, "< temp.pl ...
随机推荐
- SpringBoot | Hibernate @Transient 注解
在默认情况下,持久化类的所有属性会自动映射到数据表的数据列.如果在实际应用中,不想持久保存某些属性,则可以考虑使用@Transient来修饰它们. 如果一个属性并非数据库表的字段映射,就务必将其标示为 ...
- 2个sql 函数dbms_lob.substr 和 wm_concat
转自: http://blog.csdn.net/wenzhongyan/article/details/50315473 http://blog.csdn.net/ojerryzuo/article ...
- 运行nodejs项目报Process finished with exit code 1 错误
在项目中,明明在别人的机子上项目可以运行,但是复制到自己的电脑就无法就无法启动.报Process finished with exit code 1错误,也没提示错误地方.自己倒腾了很久总结了几个解决 ...
- 最长上升子序列 O(nlogn)
题意:求一个序列中的最长上升子序列. 平常我用的是N*N做法,但是一遇到需要nlogn时,就被卡的无地自容了. 所以下定决心要学习nlogn做法. 如何实现nlongn哪? 这里要用到一个栈B,记录按 ...
- 服务器 未能加载文件或程序集“XXXX”或它的某一个依赖项。试图加载格式不正确的程序。
,本人采用的第一种解决办法解决,已解决 问题2: 在同一个服务器上想要一个IP有两个网址,配置端口号,给新端口号开权限
- react-native入门学习( 一 )
开发环境配置 因为个人电脑是windows7环境,所以在选择安装react-native 环境的时候是用的 windows+androidreact-native中文网文档地址 https://re ...
- Brackets前端开发编辑器
http://www.cnblogs.com/xiazdong/p/3550148.html http://blog.csdn.net/shinesun001/article/details/5348 ...
- Java中的变量——通过示例学习Java编程(4)
作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=14&cid= 变量是用来存放可以更改的值的容 ...
- PL/SQL 多表关联UPDATE
假设有两个表A和B,A表字段a,b,c,d,B表字段b,e,f,两表的关联条件是字段b,现在想做个data patch,欲将B表中的字段e的值patch给A表的字段c. 有如下两种方法: 1 upda ...
- mysql实现计数器
本文转自:https://blog.csdn.net/stevendbaguo/article/details/70889449 如果是在非常高的并发之下,还是建议用内存数据库redis去实现计数的功 ...