{} 是个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可以加深对编程基本概念的理解,同时也为处理复杂的系统管理任务打下坚实的基础。当然,随着技术的发展,许多原来用Perl完成的任务已经开始转移到其他语言,但Perl仍然是一个值得学习和使用...
总结来说,"perl学习ppt全集"是一份全面的学习资源,涵盖了从Perl基础到高级特性的各个层面,通过系统的教学帮助学习者掌握这一强大的编程工具。通过深入学习和实践,不仅可以提高个人编程能力,还能在数据分析、...
### Perl学习总结知识点详解 #### 一、执行Perl程序的方法 Perl是一种强大的脚本语言,广泛应用于各种场景,包括系统管理、Web开发等。要执行一个Perl程序,首先要确保已经安装了Perl解释器。 - **文件后缀**:...
这个文档中记录和总结了我学习perl脚本语言的一些经验和初学者需要注意的事情
Perl语法混合了C、sed、awk等语言的特点,因此对于熟悉这些语言的开发者来说,学习Perl相对容易。Perl的强大之处在于它的正则表达式支持、字符串操作以及文件处理能力,这使得它在数据处理和文本挖掘方面表现出色。 ...
而《Perl_学习手札》可能是一本个人学习笔记或者实践总结,它可能包含作者在学习Perl过程中的心得、常见问题解决方案和实际项目经验。这样的书籍通常更具实战性,能够帮助读者在解决实际问题时找到灵感。 通过结合...
总结起来,这份Perl学习资料全面覆盖了语言基础、数据处理、流程控制、模块化编程、错误处理、正则表达式、文件I/O和面向对象等多个方面,是一份非常实用的自学资源。通过深入学习和实践,你将能够掌握Perl的强大...
### 重要知识点总结 #### Perl基础教程概览 1. **Perl简介** - **定义与特点**:Perl是一种多用途的脚本语言,适用于多种编程任务,因其...此教程适合初学者循序渐进地学习Perl,每一步都旨在增强理解和实践能力。
Perl 6 是 Perl 语言的一个...总结,Perl 6 技术参考手册涵盖了语言的各个方面,无论你是初学者还是经验丰富的开发者,都能从中受益。通过学习和实践手册中的内容,你将能够熟练掌握Perl 6,开发出高效、可靠的程序。
这一点对于任何考虑学习Perl的人来说都是一个重要的信息,它保证了学习Perl是一个有着长远价值的投资。 总结起来,高级Perl技术培训涵盖了Perl语言的多个高级方面,包括最新的Perl5.10版本特性、测试方法(包括代码...
通过熟练使用"perldoc",开发者可以快速查找和学习Perl的相关知识。 总结: Perl 5是一个强大且灵活的编程语言,其正则表达式和模块系统尤为突出。"perldoc"工具是学习和理解Perl的重要资源,通过它,你可以深入...
总结,ActivePerl 5.28的源码不仅是一个宝贵的教育资源,也是Perl开发者提升技能和解决问题的宝贵资源。通过深入研究源码,我们可以更好地理解Perl的运作机制,从而编写出更高效、更稳定的Perl程序。
- **学习建议**:为初学者提供学习Perl的有效路径和资源推荐。 通过以上内容的学习,读者不仅能够掌握Perl的基础语法,还能深入了解其高级特性,并学会如何利用Perl解决实际问题。无论是对于初学者还是有一定经验的...
### 在Genesis中使用Perl的配置详解 #### 一、引言 在计算机编程领域,Perl是一种广泛使用...此外,为了更好地理解和使用Perl,建议进一步学习Perl的相关文档和技术资料,以便更深入地掌握Perl及其在Genesis中的应用。
### 周末速成课程-Perl:快速入门与实用指南 #### 一、Perl简介 Perl(Practical Extraction and Report ...通过本文介绍的学习资源和实战示例,希望读者能够快速掌握 Perl 的基本用法,并进一步探索其更多高级特性。
- 《Programming Perl》、《Effective Perl Programming》等书籍是学习Perl的好资源。此外,《The Perl Journal》等杂志也值得关注。 - **Perl在线资源有哪些?** - CPAN(Comprehensive Perl Archive Network)...