想必大家都有这样的经历,在学习一门编程语言的时候,得有很多语法,但是工作中可能只有那么一小部分会用到,其余的可能只在特殊场合才会用。这也是我在最近学习perl的体会,所以决定小结一下perl中最常用的语法,不常用的如果真的用到了可以再查资料,这样可能会学得快些吧,只是个人经验。
开始总结。。。
1. 单引号字符串与双引号字符串有两个区别,一是没有变量替换功能,二是反斜线不支持转义字符,而只在包含单引号和反斜线时起作用。单引号另一个特性是可以跨多行。
2. 字符串和数值的互相转换:若字符串中含有非数字的字符,则从左起至第一个非数字的字符。
3. PERL实际上把整数存在你的计算机中的浮点寄存器中,所以实际上被当作浮点数看待。在多数计算机中,浮点寄存器可以存贮约16位数字,长于此的被丢弃。整数实为浮点数的特例。
4.在PERL中,字符串的末尾并不含有隐含的NULL字符,NULL字符可以出现在串的任何位置
5.数组的输出:
#!bin/usr/perl
use strict;
my @array=(1,2,3);
print (@array,"\n"); 输出:123
print ("@array\n"); 输出:1 2 3
6.列表范围
(1..10) = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
(2, 5..7, 11) = (2, 5, 6, 7, 11)
(2.1..5.3) = (2.1, 3.1 ,4.1, 5.1)
(4.5..1.6) = ()
7.子数组
@array = (1, 2, 3, 4, 5);
@subarray = @array[0,1]; # @subarray = (1, 2)
@subarray2 = @array[1..3]; # @subarray2 = (2,3,4)
@array[0,1] = ("string", 46); # @array =("string",46,3,4,5)
8.列表/数组的长度
当数组变量出现在预期简单变量出现的地方,则PERL解释器取其长度。
@array = (1, 2, 3);
$scalar = @array; # $scalar = 3,即@array的长度
($scalar) = @array; # $scalar = 1,即@array第一个元素的值
9.字符串中的方括号和变量替换
"$var[0]" 为数组@var的第一个元素。
"$var\[0]" 将字符"["转义,等价于"$var". "[0]",$var被变量替换,[0]保持不变。
"${var}[0]" 亦等价于"$var" ."[0]"。
"$\{var}"则取消了大括号的变量替换功能,包含文字:${var}.
10.写文件
形式为:
open(OUTFILE, ">outfile"); 如果文件不存在,会自动创建此文件。
print OUTFILE ("Here is an output line.\n");
注:STDOUT、STDERR为标准输出和标准错误文件,通常为屏幕,且不需要打开。
11、子程序中局部变量的定义有两种方法:my和local。
其区别是:my定义的变量只在该子程序中存在;而local定义的变量不存在于主程序中,但存在于该子程序和该子程序调用的子程序中(在PERL4中没有my)。
12.面向对象:
.类是一个Perl包,其中含提供对象方法的类。
.方法是一个Perl子程序,类名是其第一个参数。
.对象是对类中数据项的引用。
13.创建类:
(1)一个模块就是一个包,一个包就是一个类
-----包的缺省扩展名为".pm",即Perl Module
-----“1;”为最后一行。这是Perl包的必需条件
(2)构造函数:new()方法是对象的构造函
sub new {
my $this = {}; # Create an anonymous hash, and #self points to it.
#初始化操作
bless $this; # Connect the hash to the package class_name.
return $this; # Return the reference to the hash.
}
(3)"->"操作符调用方法
(4)析构函数
sub DESTROY {
#
# Add code here.
#
}
14.方法:
Perl类的方法(成员函数)只不过是一个Perl子程序而已;方法的第一个参数为对象或其被引用的包。Perl有两种方法:静态方法和虚方法。
(1)静态方法第一个参数为类名,一般忽略掉第一个参数
------构造函数即静态方法
(2)虚方法第一个参数为对象的引用
-----虚方法通常首先把第一个参数shift到变量self或this中,然后将该值作普通的引用使用。
-----通常为此形式:my $this = shift 或是my $this = shift @_
15.方法的输出
输出方法需要Exporter模块,在包的开始部分加上下列三行:
package package_name;#和当前定义的模块文件(.pm)同名
require Exporter;
@ISA = qw (Exporter);
@EXPORT = qw (method1,method2,...);#把自己的类方法列在@EXPORT数组中
-----Perl类的继承是通过@ISA数组实现的;@ISA数组含有类(包)名,当一个方法在当前包中未找到时就到@ISA中的包去寻找
16.创建对象:
$obj_name = new calss_name;
17.shift返回列表的当前第一个值,并缩短列表1个大小。
18.函数substr(string,offset,length)用法:
-------当length为负值时候,返回从offset开始的值,但是不包括最后|length|个字符。
19.perl中的引用有些像unix下面的连接文件,只有所有的引用被去掉,perl才会释放这个变量的空间。
20.多维数组:
创建:$abc=[["00","01"],["10","11"]];
使用:$var=$abc->[1][1];
21.perl对大小写敏感
perl常量:标量常量、列表常量、哈希常量
22.箭头运算符(->):
(1):访问引用中的数据元素
(2):对象中使用,通过它来调用一个对象(或实例)的方法
23.defined EXPR
Returns a Boolean value telling whether EXPR has a value other than the undefined value undef
24.函数运行参数:
@ARGV 表示命令行参数(选项参数不计在内,如-h,--help之类的)
$ARGV[0]表示第一个参数
$#ARGV 空数组的返回值为-1;
$#array_name返回数组最后一个元素的下标
print $list[$_] foreach 0 .. $max; #$_是默认的下标输入
25.Hash元素的增删:
(1)一定要使用delete函数来删除关联数组的元素,这是唯一的方法。
(2)一定不要对关联数组使用内嵌函数push、pop、shift、unshift及splice,因为其元素位置是随机的。
26. use lib LIST;
is almost the same as saying
BEGIN { unshift(@INC, LIST) };
The "no lib" statement deletes all instances of each named directory from @INC
27.require:
用require函数可以把程序分割成多个文件并创建函数库。例如,在myfile.pl中有定义好的Perl函数,可用语句require ("myfile.pl"); 在程序中包含进来。当Perl解释器看到这一语句,就在内置数组变量@INC指定的目录中寻找文件myfile.pl。如果找到了,该文件中的语句就被执行,否则程序终止并输出错误信息。 假设目录/u/perldir中存有你的Perl子程序库,子程序mysub存贮在文件mysub.pl中。现在来包含上该文件:
unshift (@INC, "/u/perldir");
require ("mysub.pl");