一. 基本语法
1.不要求缩进;
2.语句行末使用分号;
3.不在字符串内得空格会被Perl解释器忽略;
4.双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出;
5.Perl 标识符使用字母数字下划线组成,英文或下划线开头,区分大小写;
6.注释包括单行注释和多行注释;
单行注释:
# This is single line comment
多行注释:
=pod 注释
这是一个多行注释
这是一个多行注释
这是一个多行注释
这是一个多行注释
=cut
7.Here文档必须按照以下要求使用;
- 1.必须后接分号,否则编译通不过。
- 2.END可以用任意其它字符代替,只需保证结束标识与开始标识一致。
- 3.结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
- 4.开始标识可以不带引号号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
- 5.当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。
$a = 10;
$var = <<"EOF";
这是一个 Here 文档实例,使用双引号。
可以在这输如字符串和变量。
例如:a = $a
EOF
print "$var\n";
二. 数据类型
1.Perl是弱类型语言,所以定义变量不需要显示声明类型。不过可以使用use strict语句强制要求声明类型。
2.Perl为每种类型变量定义一个命名空间,所以不同类型变量可以使用相同名字。
3.Perl支持3种基本数据类型:
3.1 标量
包括整型,浮点型,字符,字符串,段落...
$a = 123;
$c = 123.456;
$b = "abc";
注:
Perl双引号和单引号的区别:
1).双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出。
2).用单引号定义可以使用多行文本。
3.2 数组
成员内容可以是整型,浮点型,字符,字符串,段落等,且成员可以是不同类型。
@ages = (25, 30, 40);
@names = ("google", "runoob", "taobao");
print "\$ages[2] = $ages[2]\n";
print "\$names[0] = $names[0]\n";
使用方式:
用$name[XXX]方式引用数组成员。
匿名数组使用引用数组成员符号定义:
my $aref = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ]
3.3 哈希
被映射内容可以是整型,浮点型,字符,字符串,段落,数组...
%data = ('google', 45, 'runoob', 30, 'taobao', 40);
print "\$data{'google'} = $data{'google'}\n";
使用方式:
用$name{XXX}方式引用哈希成员。
匿名哈希使用哈希访问符号{}定义:
$href= { APR =>4, AUG =>8 };
三.函数
函数收到参数固定是一个数组@_,访问该数组成员方式是$_[0],$_[1]...
所以在向函数传递参数时,如果参数包含数组,要把数组作为最后一个参数;
传递多个数组时,他们会被自动融合成一个数组;
传递数组和哈希时,使用引用方式传递,否则融合成一个数组在函数内无法使用。
四.引用
Perl的引用类似于C语言的指针,不同的是perl还支持匿名的引用,即可以直接通过引用使用匿名变量,
而不用像C语言那样必须先创建变量再用指针指向变量。
1.使用引用操作匿名数组的方法
数组正常添加成员方式:
@a = ('a', 'b', 'c');
push @a 'd'; # 添加在末尾
unshift @a 'd'; # 添加在开头
匿名数组添加成员方式:
$a = ['a', 'b', 'c'];
push($a 'd'); # 添加在末尾
unshift($a 'd'); # 添加在开头
print "@$a\n"; # 输出所有元素
2.使用引用操作匿名哈希的方法
哈希正常添加成员方式:
%a = ('a' => "A", 'b' =>"B", 'c'=> "C");
$a{'d'} = "D"; #添加新成员
匿名哈希添加成员方式:
$a = {'a' => "A", 'b' =>"B", 'c'=> "C"};
$a ->{'d'} = "D"; #添加新成员
print "$a->{'d'}\n"; #输出新成员
五.面向对象
TBD
资源:
Perl教程:
http://www.runoob.com/perl/perl-tutorial.html
Perl function查询:
http://perldoc.perl.org/functions/
Perl eval用法:
https://blog.csdn.net/Aggressive_snail/article/details/53424999#eval%E8%BF%90%E8%A1%8C%E6%97%B6%E7%BC%96%E8%AF%91%E4%BB%A3%E7%A0%81
Use base用法:
转自:
https://blog.csdn.net/zll01/article/details/4520237
use base 是面向对象编程时,用来描述“基类”的,其实说白了,
use base somemodule;
就相当于以下两句的结合:
BEGIN{
use somemodule ();
push @ISA, qw(somemodule);
}
也可以同时 use base 两个或者两个以上的模块,例如:
use base qw(Foo Bar);
就相当于:
BEGIN {
use Foo ();
use Bar ();
push @ISA, qw(Foo Bar);
}
至于 @ISA 是个什么样的数组,这完全不关 use base 的事,
只不过,@ISA 是一个比较特殊的数组,它的含义可以参见大骆驼中的描述。
顺便说一下,
use Foo ();
和
use Foo;
是不同的,
后者会自动调用 Foo 包里的 import 函数,而前者不会。
use base somemodule;
比
use somemodule;
多了并且只多了一句
push @ISA, qw(somemodule);