Perl经常使用函数一览
- 数学函数
- 字符串函数
- 数组操作
- hash操作
- 文件操作
- 文件目录操作
- 时间操作
- 其他操作
- 函数文档的查看
- 经常使用的特殊变量
- 经常使用的标准模块
数学函数
abs 绝对值的获取
$ret = abs $num; #abs(-3)的结果是3
sqrt 平方根获取函数
$ret = sqrt $num; #sqrt(4) 的结果是2
int 整数值提取函数
$ret = int $num; int(1.5)值是1,int(-1.5)值是-1
ceil(POSIX)返回不小于 x 的下一个整数,x 如果有小数部分则进一位。
use POSIX 'ceil'; $ret = ceil $num;
floor(POSIX) 输出最小的整数对于给定的实数
use POSIX 'floor'; my $num = 45.4; my $floor = floor($num); #结果是45
rand 随机数的产生 返回大于0小于给定的数。
int(rand(10)); # 0 到 9 之间的整数
looks_like_number(Scalar::Util) 如果表达式是number 返回true
use Scalar::Util 'looks_like_number'; $ret = looks_like_number $num;
字符串操作
join 把字符片段合成一个字符串
$ret = join(',', @array);
length 字符串的长度
$ret = length $str;
substr($string,$initial_position,$length);
三个参数:一个字符串,一个从零起点算的起始位置以及字符串的长度
如果想要一直取到字符结尾,可以忽略第三个参数(子串长度)就行了。
起始位置可以为负值,表示从字符串结尾开始倒数(-1代表最后一个字符)
$ret = substr($str, 2, 4);
替换的模式
substr($str, 0, 2, $replace);
index搜索字符串在主字符串中的相对位置
返回的字符位置从零开始算起的。如果无法找到返回-1.
可以加上可选的第三个参数,来指定开始搜索开始的地方。
$ret = index($str, $search, $pos);
rindex 搜索子串出现的最后的位置。
$ret = rindex($str, $search);
split 根据分隔符拆开一个字符串,第一个参数是正则表达式
@ret = split(/,/, $str);
reverse
在列表上下文,返回一个反序的列表,在标量上下文返回字符的逆序。
print join(", ", reverse "world", "Hello"); # Hello, world print scalar reverse "dlrow ,", "olleH"; # Hello, world
uc 返回字符串的大写
$ret = uc $str;
ucfirst 返回首字母大写的字符串
$ret = ucfirst $str;
lc 返回字符串的小写
$ret = lc $str;
lcfirst 返回首字母小写的字符串
$ret = lcfirst $str;
sprintf 指定格式的输出
$ret = sprintf("%08d", $num); #前面前导0补位 ret = sprintf("%.2f", $num); #小数点后2位
%c 数値をASCIIコードに対応する文字に変換 %s 引数を文字列として解釈 %d 引数を符号付整数として解釈 %u 引数を符号なし整数として解釈 %o 正数を8進文字列に変換 %x 正数を16進文字列に変換(小文字表記) %X 正数を16進文字列に変換(大文字表記) %b 正数を2進文字列に変換 %f 引数を浮動少数点として解釈 %e 引数を浮動小数点として解釈(指数表記(小文字)でフォーマット) %E 引数を浮動小数点として解釈(指数表記(大文字)でフォーマット) %g 引数を浮動小数点として解釈(指数表記(小文字)でフォーマット。末尾の0は削除される) %G 引数を浮動少数点として解釈(指数表記(大文字)でフォーマット。末尾の0は削除される) %p 引数に与えられた変数のメモリ上のアドレスに変換
chomp去除末尾换行符
chomp $str
q 单引号圈引
q/aaa'bbb/ # 相当于 'aaa\'bbb'
qq双引号圈引
qq/aaa"bbb/ #相当于 "aaa\"bbb"
quotemeta 正规表达式中使用特殊字符的反义
$ret = quotemeta $str
chr 返回asicii码对应的字符
$ret = chr $num;
数组操作
数组长度的获取
$ret = @array;
数组最后索引号的获取
$ret = $#array;
shift 移除数组的第一个元素并返回
$ret = shift @array;
unshift 放入一个或多个元素到数组的开始
unshift(@array, @items);
pop 数组中移除最后一个元素,并返回
$ret = pop @array;
push 添加一个或多个元素到数组的尾端
push(@array, @items);
splice 对数组元素的操作
A.数组元素的取出
@ret = splice(@array, $pos, $size)
B.数组元素的替换
splice(@array, $pos, $size, @items);
数组的切片
@ret= @array[0, 1, 3]; # 数组的0,1,3位置的元素列表
grep 符合条件元素的获取
@ret = grep { 条件 } @array;
条件大于3的列表
@ret = grep { $_ > 3 } @array;
map 所有数组元素的处理
@ret = map { 要素の操作 } @array;
所有元素乘以2的集合
@ret = map { $_ * 2 } @array;
max(List::Util) 数组中最大值的获取
use List::Util 'max'; $ret = max @array;
min(List::Util)数组中最小值的获取
use List::Util 'min'; $ret = min @array;
sum(List::Util)数组中元素的求和
use List::Util 'sum'; $ret = sum @array;
sort 数组元素的排序
[A]数值的顺序比较
@ret = sort { $a <=> $b } @array;
[B]数值降序的比较
@ret = sort { $b <=> $a } @array;
[C]asci码顺序的比较
@ret = sort { $a cmp $b } @array;
[D]ascii码的降序排列
@ret = sort { $b cmp $a } @array;
shuffle(List::Util)数组的随机排序
use List::Util 'shuffle'; @ret = shuffle @array;
reverse 数组元素的倒序
ret = reverse @array;
qw文字列的圈引(加上“和逗号)
@array = qw/cat dob mouse/;
Hash 的操作
keys 键值的获取操作
@ret = keys %hash;
values值得获取操作
@ret = values %hash;
each 键-值对应的一一获取
($key, $value) = each %hash;
通过循环进行获取
while (my ($key, $value) = each %hash) { ... }
exists 确定键值是否存在
$ret = exists($hash{$key});
delete键值的删除
delete $hash{$key};
reverse 键值对的翻转
%ret = reverse %hash;
文件的操作
open 文件的打开函数
open(my $fh, "<", $file) or die "Cannot open $file: $!";
文件打开失败注意错误的处理
[A]经常的操作
读取 < 写入> 追加 >>
close 文件句柄的关闭
close $fh;
<> 钻石操作符
文件一行的读入
$line = <$fh>;
通常与循环一起使用
while (my $line = <$fh>) { ... }
[A]所有行的读入
列表上下文一次性所有读取所有文件内容
@lines = <$fh>;
opendir 目录的打开函数
opendir(my $dh, $dir) or die "Cannot open $dir: $!";
注意失败进行相应的处理
closedir 目录句柄的关闭
closedir $dh;
readdir 目录文件名
目录名的一一读取
while (my $file = readdir $dh) { ... }
文件目录的操作
unlink 文件删除
unlink $file or die "Cannot remove $file: $!";
copy(File::Copy) 文件的拷贝
use File::Copy 'copy'; copy($file_from, $file_to) or die "Cannot copy $file_from to $file_to: $!";
move(File::Copy) 文件的移动
use File::Copy 'copy'; move($file_from, $file_to) or die "Cannot move $file_from to $file_to: $!";
chdir 当前目录的变更
chdir $dir or die "Cannot change directory $dir: $!";
mkdir 目录的创建
mkdir $dir or die "Cannot create directory $dir: $!";
rmdir 目录的删除
rmdir $dir or die "Cannot remove directory $dir: $!";
mkpath(File::Path) 多层目录的创建
use File::Path 'mkpath'; eval { mkpath $dir }; if ($@) { die "Cannot create $dir: $@"; }
rmtree(File::Path) 包含文件目录的删除
use File::Path 'rmtree'; rmtree($dir, {error => \my $errors}); for my $diag (@$errors) { my ($file, $message) = each %$diag; warn "problem unlinking $file: $message\n"; }
getcwd(Cwd) 当前目录的获得
use Cwd 'getcwd'; $ret = getcwd;
chmod 文件权限的变更
chmod($permission, $file) or die "Cannot change permission $file: $!";
basename(File::Basename) 文件名的获取
use File::Basename 'basename'; $ret = basename $file; # /a/b/c.txt 结果是 c.txt
dirname(File::Basename) 文件包中目录名的获取
use File::Basename 'dirname'; $ret = dirname $file; # /a/b/c.txt 的结果是 /a/b
文件运算符
确认文件和目录是否存在
#文件确认是否存在 $ ret = - f $file; #目录的存在确认 $ ret = - d $dir;
通常和条件语句一起使用
if (-f $file) { ... }
[A]常用的文件运算符一览
-f 文件是否存在 -d 目录是否存在 -r 是否可读 -w 是否可写 -x 是否可执行 -M 最后更新的天数 -A 最后访问天数 -s 文件尺寸的获取
时间
time 1970年1月1日到现在的秒数
$ret = time;
localtime 日期和时间的获取
($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime; $year += 1900; $mon += 1;
sleep 休眠的秒数
sleep $sec;
usleep(Time::HiRes) 休眠微秒
usleep $microsec;
其他函数
defined 确定值是否定义
$ret = defined($val);
kill函数的使用
kill($signal_number, $child_process_id);