数组
数组大小
@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正则匹配】》对你有帮助,请点赞、收藏,并留下你的观点哦!