perl学习之子程序】的更多相关文章

子程序,类比c语言中的函数,在形式上个人认为最大的区别:没有形参 1.1.定义子程序 1.2.调用 #! /usr/bin/perl sub marine { $n += 1 ; print "$n\n" ; } &marine; &marine;   1.3.返回值 1.3.1.   基本原则 所有的Perl 子程序都会返回值,在Perl 中返回值和不返回值是没有区别的.当然,不是所有Perl子程序返回的值都是有用的. 由于所有的被调用的子程序都要返回值,因此使用特殊…
一.定义子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读.PERL中,子程序可以出现在程序的任何地方.定义方法为:sub subroutine{statements;}二.调用调用方法如下:1.用&调用&subname;...sub subname{...}2.先定义后调用 ,可以省略&符号sub subname{...}...subname;3.前向引用 ,先定义子程序名,后面再定义子程序体sub subname;...subname;...sub su…
1.定义子程序 使用sub关键字定义 ;   子程序名和标识符同要求, 但是有的特殊的可以用 &符号;  子程序是全局的, 不需要再使用前声明;  重名函数后者覆盖前者. sub roger{ ; #全局变量$n print "Hello , sailor number $n!\n"; } &roger # 前面加&来调用, 不过没加好像也能调用. 返回值: 在子程序执行过程中会不断运算, 而最后一次运算的结果(不管是什么)都会被当成子程序的返回值.  最后一行…
本文和大家重点学习一下Perl use和require用法对比,这两个函数都是一个意思,加载和引用Perl的模块,或者是子程序,区别在于Perl use是在当前默认的里面去寻找,一旦模块不在指定的区域内的化,用Perl use是不可以引入的. Perl use和require用法对比 对比(一)说明: 这两个函数都是一个意思,加载和引用Perl的模块,或者是子程序, 区别在于Perl use是在当前默认的里面去寻找,一旦模块不在指定的区域内的化,用Perl use是不可以引入的 第一.Perl…
一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟都死 环境下的 http://www.perlchina.org/get.html Perl是脚本语言,由解释器解释运行,跨平台的 (貌似草莓的这个这跨平台比较好, ps:刚接触, 真心不知道哪好 pps:草莓??王草莓??上单??哈哈我是逗比, 表理我~) 大家可以选择下载 先检查你的perl是否…
一:基础 1:安装perl      centos: yum -y install perl       官网:https://www.perl.org/      升级到5.22:先下载,执行./install.sh 安装           报错:/lib64/libc.so.6: version `GLIBC_2.14' not found (required by perl/bin/perl)           原因:编译时写死了glibc的版本,而系统中只到2.12 ,所以重装gli…
1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码;  unless(<condition>){code...;} 等价于  if(<condition>){}else{code...;}  也就是当条件为假是执行. ) { print "Hello"; #Hello } 2. until控制结构 until就是改装过的while, 区别在于它在条件为假是执行代码块. ;; until($i>$j){ $i++;…
最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值,所有数字的内部格式都相同,采用"双精度浮点数"运算,自动转换.范围值(1e-100到 1e100) 2. 可以在一个很大的数中间插入下划线,便于阅读: 61_298_040_283_768,在取模运算时,如果其中一边或两边都是负数,则不同的Perl版本可能会有不同结果.不能计算负数的负数次方,因为会得到复数,…
子程序 定义子程序(可以在程序的任意位置) 关键字sub.子程序名(不包含与号)以及用花括号封闭起来的代码快. 如:sub marine{ $n+=1; print "hello,sailor number $n!\n"; } 调用子程序:&marine; 返回值 所有子程序都会有返回值.最后一次运算的结果是什么就将这个运算结果当作改程序的返回值. 如:sub sum_of_a_and_b{ $a+$b; print "Hey,I'm returning a valu…
一.进程处理函数 1.进程启动函数 函数名 eval 调用语法 eval(string) 解说 将string看作Perl语句执行.正确执行后,系统变量$@为空串,如果有错误,$@中为错误信息. 例子 $print = "print (\"hello,world\\n\");";eval ($print); 结果输出 hello, world 函数名 system 调用语法 system(list) 解说 list中第一个元素为程序名,其余为参数.system启动一…
Perl内置特殊变量   一.正则表达式特殊变量:1.$n  :包含上次模式匹配的第n个子串2.$& :前一次成功模式匹配的字符串3.$`  :前次匹配成功的子串之前的内容4.$’ :前次匹配成功的子串之后的内容5.$+ :前一次使用括号的模式匹配的字符串. 二.文件句柄特殊变量:1.$| :如果设置为零,在每次调用函数write或print后,自动调用函数fflush,将所写内容写回文件2.$% :当前输出页号3.$= :当前每页长度4.$- :当前页剩余的行数5.$~ :当前报表输出格式的名…
Perl语言的最大特点,也是Perl作为CGI首选语言的最大特点,是它的模式匹配操作符.Perl语言的强大的文本处理能力正是通过其内嵌的对模式匹配的支持体现的.模式通过创建正则表达式实现.Perl的正则表达式与模式匹配的特点一是内嵌于语言之中,而不是通过库或函数来实现,因此使用更简便:二是比一般的正则表达式与模式匹配功能强大. 模式匹配操作符简介 操作符 意义 实例 =~ 匹配(包含) !~ 不匹配(不包含) m// 匹配 $haystack =~ m/needle/ $haystack =~…
系统函数 == 最简单的系统调用  system "date"; # Perl会将 date 命令传递给unix的shell并获取返回值和error信息等   == 带有系统参数的系统调用   system 'ls -l $HOME'   注意,这里使用了单引号,目的是暗示$HOME是系统的变量而不是PERL的变量   == 系统函数调用时的交互   由于perl的标准输入输出和error都会被继承,因此调用系统函数和直接在shell中执行是一样的,对用户是透明的.perl会完成交互操…
变量作用域 (一)包变量 $x = 1 这里,$x是个包变量.关于包变量,有2件重要的事情要了解: 1)假如没有其他申明,变量就是包变量:2)包变量总是全局的. 全局意味着包变量在每个程序里总可访问到.在你定义了$x=1后,程序的任何其他部分,甚至在其他文件里定义的子程序,都能影响和修改$x的值.这点毫无例外:包变量总是全局的. 包变量被归类到族(叫做packages).每个包变量的名字包括2部分.这2部分类似于变量自己的名字和族名.假如喜欢,你可以称呼美国副总统为'AL',但对其全名'Al G…
Perl编程之路3 标签: perl 列表与数组   Perl里面代表复数的就是列表和数组 列表(list)指的是标量的有序集合, 而数组(array)则是存储列表的变量. 在Perl这两个属于尝尝混用, 不过更精确的是, 列表指的是数据, 而数组指的是变量, 列表的值不一定放在数组里, 但每个数组一定包含一个列表(即便是不含任何元素的空列表)   数组或列表中的每个元素, 都是单独的标量变量, 拥有独立的标量值, 从起始元素到终止元素的先后次序是固定的, 因为没个元素都是独立不相关的标量值,…
这些主要是从 "小骆驼" 书上粘贴或者摘抄出来的, 个人认为需要记的语法知识 "在某些情况下, 你可能需要在一台机器上写程序, 再传送到另一台机器上运行.这时候, 请使用"文本模式(text mode)" 或者"ASCII模式(ASCIImode)". 记住, 千万不能是"二进制模式(binary mode)"即便是文本文件, 不同的系统对待换行符的方式也有所不同, 所以碰到无法理解的换行符,某些老旧的Perl还可能…
一.正则表达式 匹配一个文件中的某个单词,并打印出来 #!/usr/bin/perl use strict; use warnings; ; open(FILE, "< temp.pl"); while(<FILE>){ #print if /\bdata\b/; #next if ~ /^#/; print if (/\bis\b/ && /\bSINK\b/) ; } close(FILE);…
### 由于perl 语法属于很自由的那种, 建议出现错误的时候打开 -w 或者使用 -Mdiagnositics 试一下 ### 如何调试 perl程序 http://www.ibm.com/developerworks/cn/linux/sdk/perl/culture-4/ 简言之, perl -d xxx.pl 命令: h 查看帮助 n 单步 p 查看变量 ### 如何判断一个变量是不是数值 http://stackoverflow.com/questions/12647/how-do-…
在写perl的时候,如果要应用到各种平台的话,比如linux 和windows,会遇到各种问题,有时就是要根据系统类型来加载各种库,之前写的就是这样的, if($^O eq 'linux'){ use XXX::xxx; }elsif($^O eq 'MSWin32'){ use XXX1::xxx1; } 结果是错的,perl提示没有找到XXX这个模块,看来,这里用use的话,perl是回去查找XXX的,就算你没有真的使用,那该怎么办? 去网上搜了一下,解决方法就是如果要动态加载库,可以用 i…
(1)用perl来ls一个目录: 写perl的时候,经常要调用到系统命令,perl有很多等价的函数可以用,但是,不小心任性了,就想用system来实现了,好吧,来个ls把,列出指定的一个目录,直接上代码 sub ls{ my ($dir) = @_; system("ls -al $dir "); } 不做参数校验了,直接ls一个目录,这个是试了一下,确实可以这样做,感觉是挺容易的,没压力.但是,你仔细想一想,这真的可行吗?仔细想一下使用场景,你会发现,这个是一个坑,据说,是惨痛的教训…
1)记得刚开始写perl的时候,对于一个功能,总是拿目前能用的数据类型来解决问题,不想想有没有更好的,能用能解决问题就好,这就导致了后期,要在函数里面添加功能的时候,函数要添加很多参数,一个函数有7.8个参数,并且这些参数都是有关系的, sub is_healthy{ my ($name, $sex, $age, $height, $weight) = @_; } 像上面这个判断一个人是否健康的函数,传入这几个参数,这几个参数还不算多,但是,到了后期,一旦你要增加功能,比如要根据一个人的地址做一…
http://ju.outofmemory.cn/entry/193944 http://blog.sina.com.cn/s/blog_6a6c136d0101dlcw.html http://blog.sina.com.cn/s/articlelist_1785467757_7_1.html http://blog.mcshell.org/category/perl…
bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. 程序包括5个文件:person.pm :实现了person类 dog.pm :实现了dog类 bless.pl : 正确的使用blessbless.wrong.pl : 错误的使用blessbless.cc : 使用C++语言实现了与bless.pl相同功能的代码 person.pm CODE:#!/usr/bin/perl -wp…
perl有引用的概念:一组数据实际上是另一组数据的引用.这些引用称为指针,第一组数据中存放的是第二组数据的头地址.引用的方式被用得相当普遍,特别是在面向对象的模块.函数的参数传递等常见.但perl对每个引用都是以一个普通的变量来定义的,有时候,如果数据的架构比较复杂,我们可能会困惑于某个变量所指向的地址的实际内容是什么?perl的ref函数就可以帮助我们. 一.说明从perl自带的帮助说明可以了解相关的用法: 引用 $ perldoc -tf refref EXPRref     Returns…
Perl 被设计成90%擅长处理文本,10%处理其余的问题.因此Perl 有强大的文本处理能力,包括正则表达式. 第一个程序 hello world #! /usr/bin/perl -w use strict ; use warnings ; print "hello world!\n" ; warn "test warn\n";#告警信息 die "test die"; #后面的程序不能再被执行 1.1.警告: 使用系统自身告警 perl -…
1.1.数字 所有数字格式内部一致,全部是double 7.25e45   == 7.25 * 1045 5.25 6.00 5.1-2.4          #5.1-2.4,2.7 10/3              #通常是浮点除,3.33333… … 还提供了模数运算符(%).10%3 的值是10 除以3 的余数.两个操作数首先变成它们对应的整数值,如10.5%3.2 转换为10%3后再计算. 指数操作符,两个*号表示,如2**3,表示2 的3 次方,等于8 1.2.字符串 长度无限 P…
  列表或称为数组,和c语言中的数据类似,只是perl自己特殊的一些写法. 1.1.定义 一个列表或者数组可以包含数字,字符串,undef 值,或者任意不同类型的标量值的组合,但是这些元素的类型通常是一致的. 数组下标: ·    数组中的元素是由连续整数编了号的,其从0 开始; ·    下标可以是任何能返回数值的表达式.如果其值不为整数,则自动将其转换为小于它的最大整数值. ·    如果下标超出了数组的范围,则其值为undef.这和通常的变量情况是一样的,如果没有值存放在变量中,则其为un…
1.1. 从标准输入设备输入 <STDIN> 行输入操作在到达文件的结尾时将返回undef,在while循环的条件中不能使用chomp: while (defined($line = <STDIN>)) { print “I saw $line”; } 在循环的内部,我们将看到每一行,一行接着一行,perl提供简写: while(<STDIN>){ print “I saw $_”; } while (defined($_ = <STDIN>)){ prin…
Perl中实现了所有C 的操作符! Perl力求代码最少! 1.1.unless unless的含义是:除非条件为真,否则执行块中的代码,和if正好相反 unless($fred=~ /^[A-Z_]\w*$/i){ print “The value of \$fred doesn’t looklike a Perl identifier name.\n”; } else { print “match success\n”; } #大写字母或者下划线开头的字符串 1.2.until 将while…
需求描述: 日志记录了一次操作的时间,即server端接收包到发送结果到client端的时间,取出操作时间最长的100个记录. 日志信息片段: [2013-09-13 15:23:50,445.500] [47028700024080] FATAL - socket = 9 [2013-09-13 15:23:50,446.156] [47028700024080] FATAL - a client connected with ip: 10.10.10.127, name: <unknown>…