About Perl (zz)
Perlfoldunfold
Table of Contents
命令行参数
与C语言的区别
特殊变量
特殊语法
use diagnostics;
文件判断符
启动和结束操作
本地文档(Here-Document)
字符重复操作符
引号函数
比较操作符号<=>
each %
范围操作符 ..
warn
常用的函数
pack, unpack, ord, hex
reverse
binmode($handle);
sort
shift, unshift, push, pop
glob
系统调用
open管道
常用的扩展包
Text::Tabs
GetOpt::Long
File
List::Util
Win32
Tk
经典书籍
命令行参数
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
page tags: perl 脚本语言
页:
[1]