xglys 发表于 2017-5-17 07:30:23

About Perl (zz)

Perl
foldunfold


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]
查看完整版本: About Perl (zz)