Perl

命令行参数

perl -e "$cmd1" -e "$cmd2" #通过 -e 可直接输入程序。
perl -d -e 1 #进入调试程序,1是最简单的程序。类似perl shell 使用。-de 可连用
perl -c #编译Perl脚本
环境变量 PERL5LIB 中定义的目录会附加到Perl的库搜索路径中,从而扩展用户自定义的库。

与C语言的区别

{}
f或for之后跟随单条语句时,C中是可以省略{}的,但Perl不行,只有if后置时才可省略。

循环控制
循环的流程控制关键字,C中的continue和break对应Perl中的next和last。

头文件包含
Perl中使用require $another_file 包含其他脚本(或者use),对应C中的include
use是在编译阶段就会导入,而require是在运行时实时导入的!

true, false
Perl没有true/false 定义, 故误用 $cmd if (false) 中$cmd会执行的!

注:有本面向C程序员的Perl教程,从C的角度来介绍Perl,很适合C程序员。(书名忘了,下次补上)

特殊变量

$_
默认标量名
@_
默认数组名
$n
regexp中的第n个匹配部分
$null
空变量,可用来占编码位置。
$^O
操作系统名
$!
上一个系统调用失败时的出错信息(只有调用失败时才有意义)
$?
保存系统调用的返回值
%SIG
该hash表指向信号处理函数,例如 $SIG{DIE} = \&diehandle;可修改sigint 的处理函数。

特殊语法

use diagnostics;

使用use strict;这个选项时, 若开启use diagnostics;则会为语法检查中的错误输出详细的解释。
另外 no strict; 可以在当前作用域内关闭检查!

文件判断符

$do_something if (-e $file); #判断$file是否exist。(详细判断列表待补充 …)

启动和结束操作

BEGIN { $begin_operation; } #在程序开始时执行
END { $end_operation ; } #在程序结束时执行

本地文档(Here-Document)

$msg = <<E_O_F;
#everything here will be put into $msg
E_O_F

在E_O_F(这个名字可换)之间包含的所有文字原封不动的放入$msg当中
«和E_O_F之间不可有空格,E_O_F与;间可有空格。但可用"E_O_F"限定。

字符重复操作符

‘#’ x 3 生成字符串 “###”
@array = ("*") x100 可将整个数组初始化为100个*

引号函数

qq: "
: q
'

比较操作符号<=>

$a<=>$b
在a>b返回1,a<b返回-1, a=b返回0。只用于数字比较! 可用在sort中。

each %

while ( ($key, $val) = each %hash ) { $cmd; }

可遍历整个hash, 并且处理较大的hash时,速度要比先用keys,再一一读取快得多。

范围操作符 ..

例如 foreach (0..20)中的.. 只可升序(是否有降序形式?)

warn

warn <<"E_O_F";
this is a warning message!
E_O_F

可直接输出warning.

常用的函数

pack, unpack, ord, hex

提供多个进制之间的数据转换( 使用方式待补充… )

reverse

反转字符串

binmode($handle);

可切换文件句柄至2进制模式

sort

用于排序,默认情况下按照ASCII排序
sort { $a<=>$b } @array; 按 {$cmd } 返回值排序。

shift, unshift, push, pop

数组在使用shift, unshift时看作fifo

使用push, pop时看作stack

glob

使用通配符获得文件列表,
可简写为 @cfiles = <*.c>;
<*>可以返回所有文件和文件夹
另外也可以使用opendir/readdir/closedir组合,但要复杂一些

系统调用

@dir = ‘dir`; @dir = qx(dir); #注意其内部会对$@处理,但不处理%,qx’$var' 可禁止其处理!

这种方式类似于system 函数,但system不会捕获输出,这里会返回输出结果。

open管道

 open(fhandle, "|more");
打开输出到more的管道,使得输出可分页显示
 open(fhandle, "gzip -dc $zipfile|");
可直接处理压缩文件$zipfile.

常用的扩展包

Text::Tabs

处理 tab字符很有用,提供expand和unexpand方法转换tab和空格。

GetOpt::Long

类似Unix函数GetOpt, 提供解析命令行选项的功能,使用时最好把所有选项集中于hash表中,方便统一管理。另外,在解析完参数后,ARGC和ARGV会被修改,指向未被解析的参数。

File

::Path 处理路径相关任务,比如mkpath方法可创建多个目录。

::Find 搜索文件或目录。

List::Util

列表操作。Shuffle 函数可以将列表顺序随机打乱。

Win32

Win32::OLE 通过OLE接口操作其他软件。

Win32::ClipBoard 控制系统剪贴板。

Perl本身附带提供了一个OLE browser程序,类似VC的OLE viewer, 可查看OLE接口。

Tk

Tk界面扩展包 (是否需要 Tcl库?)

经典书籍

1. Programming Perl
2. Perl CookBook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.