一、Perl
Perl是由Larry Wall(拉里·沃尔)在1987年设计的一门计算机编程语言,最重要而且也是最吸引人的特性就是它拥有自己的代码库CPAN,而且,它内部集成了正则表达式!
二、基本语法规则:
1、代码规范
(1)代码行
Perl代码行跟主流语言(C/C++,JAVA等)类似,以" ; " 结尾。
(2)注释
Perl 没有块注释的功能,单行注释为 # 符号,在需要注释的行开头加上 # 即可。
(3)模块加载
Perl有两种模块加载导用的办法:use和require;两者是有区别的。
表1:use及require加载模块时的区别
use | require | |
模块后缀名 | 不需要 | 需要 |
模块加载时间 | 编译时 | 执行时 |
模块子程序 | 一同导入 | 不导入 |
use Cwd
require "config.pl"
print "注释范例";
# 此行已被注释
2、变量
(1)定义
Perl的变量定义及其使用都采用 $变量名 的形式。 所有变量都以$开头,在代码中变量一目了然。
(2)声明
p.s 要定义变量的作用域,只需要在定义变量时,在变量前加入作用域名称即可。
my $a = 1;
print a;
3、数组
(1)定义
Perl数组定义采用 @数组名 的形式,以@开头。
(2)声明及使用
数组元素调用采用 $数组名[下标] 的形式。
@array = (1,2,3);
print $array[0];
4、控制台标准输入输出
(1)标准控制台输入
标准输入采用 <STDIN> 的形式,与C语言gets类似,为单行读取。
(2)标准控制台输出
标准输出采用 print 的形式,直接跟输出的变量名或字符串。
#! /usr/bin/perl
while(<STDIN>){
$num=<STDIN>;
printf "%${num}s\n", $_;
}
5、自定义函数格式
自定义函数在Perl里被称为子程序。
(1)定义
Perl里子程序的定义可以位于程序的任何地方。用sub来定义子函数,后面跟着子程序名。
形如: sub 子程序名 { 代码段 }
(2)调用
Perl采用 $子程序名 来调用子程序
$ subpro;
sub subpro{
print "这是子程序"
}
若先定义后调用可省略 $
(3)返回值
Perl没有return语句,它返回的是子程序代码里最后一行代码的值。
sub subpro{
1+2;
}
print subpro;
# 程序输出 3
(4)参数传递
Perl子程序内部采用$_ 数组来单个参数,用@_来接收多参数列表。若需要接收多参数列表的第一个参数则采用 @_[0]的形式,也可以直接使用数组接收整个参数列表。
sub subpro1{
@ array = @_;
}
sub subpro2{
$a = $_;
}
subpro1(1);
subpro2(1,2,3);
(5)子程序变量作用域
子程序中局部变量的定义有my和local两种方法。my定义的变量只在该子程序中存在;而local定义的变量可以存在该子程序和该子程序调用的子程序中。
sub sub_1{
$b = 2;
}
sub sub_2{
my $a = 1;
local $b = 2;
sub_1;
}
Perl提供一些常用的系统函数接口方便用户使用。
1、substr
substr( 目标字符串 , 起始下标 , 结尾下标) 获得目标字符串的一个子串。
2、getcwd
获得当前程序运行的目录,返回一个字符串。
3、lc
lc( 目标字符串 ) 获得目标字符串的小写版本。
use Cwd;
my $dir = getcwd;
my $driver = lc(substr($dir,0,1));
print $driver
# 输出当前硬盘盘符
4、open
(1)语法
open (FILEHANDLE, EXPR, LIST)
open (FILEHANDLE, EXPR)
open (FILEHANDLE)
(2)作用
将EXPR目录指向的文件读到FILEHANDLE句柄中。
(3)返回值
0 - 失败
1 - 成功
(4)模式
EXPR可以有如下几种种模式:
"EXPR" 以只读模式打开文件.
">EXPR" 以写模式打开文件.
">>EXPR" 以追加模式打开文件,写和追加的区别在于写模式将原文件覆盖,而追加模式则在文件末尾处添加内容.
"+>EXPR" 以读和写方式打开文件.
"+>>EXPR" 以读和追加方式打开文件.
5、die
(1)定义
die LIST
(2)作用
该函数作用是停止解释程序的运行,并输出LIST字符串,通常用于监控当前行代码的异常。
P.S.1:如果LIST字符串中含有"$!"标识符标记的变量,则接着输出该变量的值和调用。
P.S.2:如果LIST字符串没有换行符,则会接着在字符串后输出一条消息:died at scriptname line xxx
(3)返回值
无
my $Register = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
my ($hkey,$type,$sys_path);
$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die "open: $!";
# 如果注册表打开失败,程序输出“open:0 died at scriptname line xxx”
6、split
split (字符串) 该函数将字符串按特定格式进行拆分,并存入数组当中。
my @a = split(';',$sys_path);
7、localtime
(1)语法
localtime(EXPR)
(2)作用
转换EXPR指定的时间,如果不带EXRP,则转换当前时间。
(3)返回值
在标量上下文中,它返回一个字符串的形式: Thu Sep 21 14:52:5
在列表上下文中,返回的各个组件值 (seconds, minutes, hours, day of month, month, year, day of week, day of year, daylight savings time)。
8、chdir
(1)语法
chdir(EXPR)
chdir
(2)作用
改变当前的工作目录到EXPR, 或如果没有指定,则到用户的主目录。
(3)返回值
0 - 失败
1 - 成功
9、glob
(1)语法
glob (EXPR)
glob
(2)作用
返回EXPR的文件的列表,EXPR不指定路径则为当前目录。
若省略EXPR,则默认从$_(也就是子程序参数)读入。
(3)返回值
在标量上下文错误返回undef,否则第一个文件的扩展名列表
在列表上下文中的空列表上的错误,否则列出扩展文件名。