糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 【perl正则匹配】

【perl正则匹配】

时间:2018-09-03 14:35:39

相关推荐

【perl正则匹配】

数组

数组大小

@array = (1,2,3);print "数组大小: ",scalar @array,"\n";#数组大小: 3

数组最大索引

#!/uer/bin/perl@array = (1,2,3);$array[50] = 4;$size = @array;$max_index = $#array;print "数组大小: $size\n";print "最大索引: $max_index\n";#数组大小: 51#最大索引: 50

添加和删除数组元素

Perl 提供了一些有用的函数来添加和删除数组元素。下表列出了数组中常用的操作函数:

正则表达式

匹配:m//(还可以简写为//,略去m)

替换:s///

转化:tr///

这三种形式一般都和 =~ 或 !~ 搭配使用, =~ 表示相匹配,!~ 表示不匹配。

表达式匹配修饰符

模式匹配有一些常用的修饰符,如下表所示:

替换操作修饰符

替换操作修饰符如下表所示:

正则表达式规则

Perl 进程管理

反引号运算符

使用反引号运算符可以很容易的执行 Unix 命令。你可以在反引号中插入一些简单的命令。命令执行后将返回结果:

$files = `ls -l `;

system() 函数

可以使用 system() 函数执行 Unix 命令, 执行该命令将直接输出结果。默认情况下会送到目前Perl的STDOUT指向的地方,一般是屏幕。你也可以使用重定向运算符 > 输出到指定文件:

需要注意命令包含环境变量如 $PATH 或 $HOME 的输出结果,如下所示:

#!/usr/bin/perl$PATH = "我是 Perl 的变量";system('echo $PATH'); # $PATH 作为 shell 环境变量system("echo $PATH"); # $PATH 作为 Perl 的变量system("echo \$PATH"); # 转义 $

fork() 函数

用于创建一个新进程。在父进程中返回子进程的PID,在子进程中返回0。如果发生错误(比如,内存不足)返回undef,并将$!设为对应的错误信息。

fork 可以和 exec 配合使用。exec 函数执行完引号中的命令后进程即结束。

if(!defined($pid = fork())) {# fork 发生错误返回 undefdie "无法创建子进程: $!";}elsif ($pid == 0) {print "通过子进程输出\n";exec("date") || die "无法输出日期: $!";} else {# 在父进程中print "通过父进程输出\n";$ret = waitpid($pid, 0);print "完成的进程ID: $ret\n";}

执行以上程序,输出结果如下:

通过父进程输出

通过子进程输出

6月19日 星期日 22时21分14秒 CST

完成的进程ID: 47117

如果进程退出时,会向父进程发送一个CHLD的信号后,就会变成僵死的进程,需要父进程使用wait和waitpid来终止。当然,也可以设置$SIG{CHLD}为IGNORG:

#!/usr/bin/perllocal $SIG{CHLD} = "IGNORE";if(!defined($pid = fork())) {# fork 发生错误返回 undefdie "无法创建子进程: $!";}elsif ($pid == 0) {print "通过子进程输出\n";exec("date") || die "无法输出日期: $!";} else {# 在父进程中print "通过父进程输出\n";$ret = waitpid($pid, 0);print "完成的进程ID: $ret\n";}

执行以上程序,输出结果如下:

通过父进程输出

通过子进程输出

6月19日 星期日 22时30分56秒 CST

完成的进程ID: -1

Perl 条件语句

UNLESS

语法格式如下所示:

unless(boolean_expression){# 在布尔表达式 boolean_expression 为 false 执行}

Kill 函数

kill(‘signal’, (Process List))给一组进程发送信号。signal是发送的数字信号,9为杀掉进程。

如果觉得《【perl正则匹配】》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。