寒假【perl语言学习脚本】16.1 16.2 16.3 16.4

寒假【perl语言学习脚本】16.1 16.2 16.3 16.4
#!/usr/bin/perl -w
chdir ‘/home/zhangjingjing’ or die “can’t chdir to /home/zhangjingjing directory:!";execls,lordie"cantexecls:!"; exec 'ls','-l' or die "can't exec ls:!”;
#第一行的程序代码会将当前工作目录切换到根目录,它的名称总是固定的
#第二行使用了多参数的exec函数来将结果传递到标准输出
#exec函数导致perl进程自己去执行任务,

例如:要运行/tmp目录下的bedrock命令并带上-o args以及程序本身所调用的参数:

chdir ‘/tmp’ or die “Cannot chdir /tmp:$!”;

exec ‘bedrock’, ‘-o’, ‘args1’, @ARGV;

寒假【perl语言学习脚本】16.1 16.2 16.3 16.4
#!/usr/bin/perl -w
open STDOUT,’>’,‘ls.out’ or die “can’t write to ls.outL!";openSTDERR,>,ls.errordie"cantwritetols.err:!"; open STDERR,'>','ls.err' or die "can't write to ls.err:!”;
chdir ‘/home/zhangjingjing’ or die “can’t chdir to /home/zhangjingjing directory:!";execls,lordie"cantexecls:!"; exec 'ls','-l' or die "can't exec ls:!”;
#程序的前两行会重新打开STDOUT和STDERR并将它们重定向到当前工作目录下的两个文件里(在切换工作目录之前)
#在工作目录切换之后,将会执行显示目录清单里的命令,并把数据传送到之前打开的两个文件里
寒假【perl语言学习脚本】16.1 16.2 16.3 16.4
#!/usr/bin/perl -w
print date;
if (date=~/\AS/){
print “go play!\n”;
}else{
print “get to work!\n”;
}
#因为Saturday周六和Sunday周日都是以S开头,而且date命令的输出结果又是以“今天是星期几”作为开始
#所以只要检查date命令的输出,看看它是否以S开头就可以了
#可以将模式换成/\A(Sat|Sun)/

\A: 匹配字符串的绝对开头

寒假【perl语言学习脚本】16.1 16.2 16.3 16.4
#!/usr/bin/perl -w
use 5.010;
sub my_hup_handler {state n;saycaughtHUP:,++n; say 'caught HUP:',++n}
sub my_usr1_handler {state n;saycaughtUSR1:,++n; say 'caught USR1:',++n}
sub my_usr2_handler {state n;saycaughtUSR2:,++n; say 'caught USR2:',++n}
sub my_usr2_handler {say ‘caught INT.Exiting.’;exit}
say " I am $$";
foreach my $signal (qw(int hup usr1 usr2)){
$SIG{uc KaTeX parse error: Expected 'EOF', got '}' at position 7: signal}̲="my_{signal}_handler";
}
while(1){sleep 1};
#我们需要另外打开一个终端会话来运行程序以发送信号
$ kill -HUP 61203
$perl -e ‘kill HUP => 61203’
$perl -e ‘kill USR2 => 61203’
#该程序的输出显示每次信号来到时我们已经见过的次数:
KaTeX parse error: Expected 'EOF', got '#' at position 144: …t INT.Exiting. #̲让它能捕获信号并报告之前收到该…kill -USR1 12345

#要捕获某些信号,就要设置信号处理句柄,做一些重复性的工作,对每个信号处理句柄子程序,都设置一个state变量
#这样每次调用子程序时都可以访问之前累计的数字
#用foreach循环一次将正确的子程序名称赋值给%SIG中的适当值
#最后创建一个无限循环,让程序一直运行着,准备接收信号