`
qzriso
  • 浏览: 237087 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

学习perl总结

    博客分类:
  • perl
阅读更多

{} 是个block (块) 执行代码的块。
[] 是个列表,指向数组。
() 是个参数列表。
###############################################
$$aaa[0]  ${$aaa}[0]  $aaa->[0]
      $aaa指向数组第一个元素
###############################################
$$aaa{key}  ${$aaa}{key}   $aaa->{key}
      $aaa指向列表第一个元素。
###############################################
${$aaa{key}}  对%aaa散列解引用。
###############################################
注意:$aaa[3] 和 $aaa->[3]是不相同的。
前者讲: @aaa里的第4个元素。
后者讲: 保存在$aaa里数组引用的第四个元素。
@$aaa = (); # 清除@aaa内容。
###############################################
${identifier}; # 和$identifier 相同
${"identifier"}; # 也是$identifier,不过却是个符号引用。
###############################################
在方括弧或花括弧之间,或在一个闭方括弧或花括弧和圆括弧之间的箭头是可选的。后者表示间接的函数调用
###############################################
一个伪散列是个指向数组的任意引用,他的第一个元素是个指向散列的引用
###############################################
hash 里面没有存他的方法,这完全是 -> 操作符的功劳。-> 操作符其实也没有什么神秘之处,他只不过是调用了一下他右边的那个 sub(注),并且把左边的那个引用变量 unshift 到 sub 的参数列表中去。注:为了正确地找到右边的那个 sub,他还需要把左边的那个引用变量 ref 一下取出原先 bless 进去的那个 tag
###############################################
1,new 的名称不是 Perl 语法的一部分,你完万能叫 create, construct, build, 或别的东西。
2,对象也不一定要用 hash 引用来存储数据,事实上所有类型的引用都能,只不过 hash 引用正好方便表示 OOP 里面的“属性=>值”这种模型而已。事实上,CPAN 上就有一组用数组引用来构造类体系的,更加省空间。
3,Perl 对 OOP 提供的语法非常有限,不过支持 OOP 的大多数概念。这些有限的语法包括 bless 函数、package 语句、-> 操作符、更有 @ISA 数组,及 SUPER UNIVERSAL 等有限的几个关键字。除此以外我想再没有别的东西了。
###############################################
bless 的作用是给第一个参数(必须是个引用)打上一个印记(就似乎盖个戳相同),而这个印记就标明了这个引用从此以后应该属于哪个类。理解了这个之后,你就明白 bless $self, $class 和 $class = $self 其实是完全不同的东西。bless $self, $class 之后,$class 还是原来的值,$self 也还是原来的值,只不过 $self 的印记变成了 $class 的内容。$class = $self 则是把 $class 变成和 $self 值相同的一个变量。
###############################################
perl的内置特别变量:
    $- 当前页可打印的行数,属于Perl格式系统的一部分
  $! 根据上下文内容返回错误号或错误串
  $” 列表分隔符
  $# 打印数字时默认的数字输出格式
  $$ Perl解释器的进程ID
  $% 当前输出通道的当前页号
  $& 和上个格式匹配的字符串
  $( 当前进程的组ID
  $) 当前进程的有效组ID
  $* 设置1表示处理多行格式.目前多以/s和/m修饰符取代之.
  $, 当前输出字段分隔符
  $. 上次阅读的文件的当前输入行号
  $/ 当前输入记录分隔符,默认情况是新行
  $: 字符设置,此后的字符串将被分开,以填充连续的字段.
  $; 在仿真多维数组时使用的分隔符.
  $? 返回上一个外部命令的状态
  $@ Perl解释器从eval语句返回的错误消息
  $[ 数组中第一个元素的索引号
  $ 当前输出记录的分隔符
  $] Perl解释器的子版本号
  $^ 当前通道最上面的页面输出格式名字
  $^A 打印前用于保存格式化数据的变量
  $^D 调试标志的值
  $^E 在非UNIX环境中的操作系统扩展错误信息
  $^F 最大的文件捆述符数值
  $^H 由编译器激活的语法检查状态
  $^I 内置控制编辑器的值
  $^L 发送到输出通道的走纸换页符
  $^M 备用内存池的大小
  $^O 操作系统名
  $^P 指定当前调试值的内部变量
  $^R 正则表达式块的上次求值结果
  $^S 当前解释器状态
  $^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间
  $^W 警告开关的当前值
  $^X Perl二进制可执行代码的名字
  $_ 默认的输入/输出和格式匹配空间
  $| 控制对当前选择的输出文件句柄的缓冲
  $~ 当前报告格式的名字
  $` 在上个格式匹配信息前的字符串
  $’ 在上个格式匹配信息后的字符串
  $+ 和上个正则表达式搜索格式匹配的最后一个括号
  $ 当前进程的有效用户ID
  $0 包含正在执行的脚本的文件名
  $ARGV 从默认的文件句柄中读取时的当前文件名
  %ENV 环境变量列表
  %INC 通过do或require包含的文件列表
  %SIG 信号列表及其处理方式
  @_ 传给子程式的参数列表
  @ARGV 传给脚本的命令行参数列表
  @INC 在导入模块时需要搜索的目录列表
  $-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置 。

~~~~~~~~~~~~~perl 编译 exe 工具:perlcc、perlapp、perl2exe、par(
http://par.perl.org
)~~~~~
s///  先做匹配,再做替换,替换在匹配正确之后才生效的。
.*? 不贪多匹配
(aaa)\1 回朔。把aaa放如缓存 代表 aaaaaa.
###########################################################
(?=), look ahead匹配但不吃掉
(?!),下一组文本不match时,才匹配
(?), lood behind, also (?)
$a = "cat housecat catch crazycats";
$a =~ s/(?),使用(…)但不计入反向引用中
(?xims-xims: )
/Answer: ((?i)yes)/; # ’Answer: yes’, ’…YES’, ’…Yes’, etc
/Answer: ((?-i)yes)/i; # ’answer: yes’ only, not "…YES"
(?#)comment, replaced by m/…/x now.
Quote-like operators
?RE? Match only once between reset call.
###########################################################
Define and call an anonymous subroutine
Lvalue subroutine (experimental)
my $subref = sub {$_[0] + $_[1]};
my $add = $subref; # make a copy of subroutine-ref
print &{$add}(1,2), "\t", &$add(1,2), "\t", $add->(1,2);
sub Lsub : lvalue {
my($index)=shift;
$_[$index]; # don’t say return $_[$index] here
}
my @a = qw(I my teaching perl.);
$" = " ";
print "@a\n";
Lsub(2, @a) = ’learning’; #函数返回作值,修改为’learning’
print "@a\n"; # @a的值已被修改
###########################################################
Open a user file
? For read: open(FD, "filename");
? For append: open(FD, ">>filename");
? For pipe read: open(FD, "process |");
? For pipe write: open(FD, "|process");
? +> 截断文件并打开读写+
#############################################################
***last 操作符即时退出当前循环,如果有continue块也不会执行。
***next 操作符忽略当前循环的余下语句然后开始一次新的循环。如果循环里面有continue子句,那么他将就再重新计算条件之前执行,这里continue能增加循环变量。
LINE: while (){
next LINE if /^#/;
next LINE if /^$/;
...
} continue {
  $count++;
}
***redo 操作符再不重新计算循环条件的情况下重新开始循环语句块,如果存在continue块也不会执行。
last next redo 不单单用于循环,他们能用于块。
goto LABEL 不能跳进所有需要初始化的构造,比如子过程或foreach循环。她也不能跳进一个已优化了的构造
-> 是个中缀解引用操作符.如果右边是个[...]数组下标,一个{...}散列下标,或一个(...)子过程参数列表,那么左边必须是个对应的数组,散列, 或子过程的应用(硬引用和符号引用都行).在一个左值(可赋值)环境里,如果左边不是个引用,那么他必须是个能够保存硬引用的位置.这种情况下,引用会为 你自动激活.
..和... 当操作符处于假状态后就不再测试右操作数,和党操作符处于真状态后就不再测试左操作数.
###############################################################
解引用在所有数组或散列查找之前发生(或说解引用比数组合散列查找绑定得更紧)
###############################################################
如果试图给一个不是硬引用的数值进行解引用,那么该值会被当作一个符号引用用,也就是说,该引用被解释成一个代表某个全局量的名字的字串。
$aaa == ${aaa} != ${’aaa’} (后面的是符号引用)

分享到:
评论

相关推荐

    Perl学习总结 - 副本.docx

    Perl学习总结 - 副本.docx

    perl语言个人学习总结教程

    主要总结了perl语言的基础内容以及个人的学习体会,为初学者提供一定的参考与借鉴。

    perl脚本语言学习笔记心得

    这个文档中记录和总结了我学习perl脚本语言的一些经验和初学者需要注意的事情

    perl语言中的变量类型

    perl语言中的变量类型 PERL 学习中总结

    perl正则表达式学习手册

    perl的正则表达式,总结的一个小手册,用着还是挺方便的。

    perl学习资料

    有关于perl语言的比较详细的资料详细介绍perl的语法和经验总结

    openLDAPb部署目录服务

    还没有正式开始学习要学的东西就已经被环境搞得很头疼,总结如下 安装perl支持 yum install perl* (yum安装perl相关支持) yum install cpan (perl需要的程序库,需要cpan的支持,详细自行百度) 下载perl并安装 ...

    asp学习相关资料大全

    除了可用VBscript或Jscript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其他脚本语言,譬如Perl、Tcl等。脚本引擎是处理脚本程序的COM(Component Object Model)组件。 (6)Active Server Pages的...

    python中ImageTk.PhotoImage()不显示图片却不报错问题解决

    发现问题 今天在使用ImageTk.photoImage()显示图片时,当把包含该函数放在自定义函数里时,不能...以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言

    enron:使用机器学习(ML)技术来开发分类器,以从安然语料库中识别感兴趣的人(POI)。 Udacity Data Analyst纳米学位项目

    从安然语料库中识别感兴趣的人格蕾丝·Perl(Grace Pehl)博士机器学习项目简介Udacity Data Analyst纳米度2015年10月2日问题1为我们总结了该项目的目标以及机器学习在完成该项目中的作用。 作为答案的一部分,请...

    LAMP实验报告.docx

    LAMP架构:协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境(Linux 系统 + Apache网站服务器+Mysql数据库服务器+ PHP(Perl、Python)网页编程语言 密码1234修改123

    十、区块链学习-Hyperledger Fabric (基于release-1.0) 链码开发API总结

    链码开发API总结1. 文档地址2. 主要api2.1 参数读取API-GetFunctionAndParameters2.2 获取链码交易的参数API-GetStringArgs2.3 与账本状态交互的API2.3.1 在账本中增加键值对-PutState2.3.2 查找账本中key对应的-...

    PHP3程序设计

    尤其值得注意的是,书中使用了多个“中场”章节,以便在学习过一定知识之后,通过实际例子来对所学的知识进行巩固,这些章节介绍的内容具有很强的实用价值。因此本书不仅对Web编程的入门者,即使对于有一定经验的Web...

    PHP编程入门的基本语法知识点总结

    它的语法利用了 C、Java 和 Perl,易于学习。该语言的主要目标是允许 web 开发人员快速编写动态生成的 web 页面,但 PHP 的用途远不只于此。  简单来说,就是php是一种脚本语言,可以做很多事情。①服务器端脚本 ...

    一个采用thinkphp3.2开发的商城系统.zip

    首先作为一套前台模板框架的学习总结成果。 PHP(全称:PHP: Hypertext Preprocessor)是一种广泛应用于Web开发的开源脚本语言,以其易学易用、高效灵活的特性深受广大开发者喜爱。诞生于1995年,由Rasmus Lerdorf...

    java乒乓球源码-programming-guidelines:我的个人编程指南

    这份清单总结了我过去犯过的很多错误。 我写它,是为了帮助你,避免这些错误。 这是我个人的看法和感受。 没有事实,没有单一的真理。 我需要你的反馈 如果您有一般性问题,请开始一个 . 如果您认为有什么不对或遗漏...

    javascript中expression的用法整理

    小哥我最近在学习javaScript, 学到regular expression的时候见知识点有些杂乱,所以特别写篇博客做个总结。 定义 在javascript里定义reg exp有两种方法: 1) 用new exp : var exp1 = new exp(“abc”); 2) 直接在...

    JAVA.WEB服务.构建与运行

    1.3 由perl和ruby语言实现的web服务客户端 10 1.4 了解soap 11 1.5 java语言实现web服务请求 13 1.6 基于通信层的http和soap消息跟踪 14 1.7 目前为止还有什么不清楚 16 1.8 java soap编程api 18 1.9 带有复杂数据...

    js前端面试之同步与异步问题详解

    我本来是打算写一篇co源码精读(为啥读co,因为它短),然鹅发现自己存在一系列基础问题没有搞透彻,打算写一个js基础系列文章,总结自己的理解(copy),希望与你在学习路上一同进步。首先问问自己当面试官问到js中的...

Global site tag (gtag.js) - Google Analytics