Perl编程:Eval与模块的深入解析
1. 使用Eval实现超时控制
在Perl中,调用 eval 时,它会记录下下一个要执行的语句,以防在其内部调用了 die 。 die 内部会调用 longjmp ,因此无论栈有多深,Perl都能立即将控制权转移到 eval 之后的语句,并且 eval 代码中创建的所有临时和局部变量都会被自动垃圾回收。
利用 setjmp 和 longjmp ,我们可以实现一种新的技术:中止阻塞的系统调用和无限循环。例如,我们希望最多等待10秒让用户输入内容。如果使用 $buf = <> ,程序会一直阻塞直到用户按下回车键。我们可以使用内置的 alarm() 函数在指定秒数后生成 ALRM 信号来实现超时控制。
以下是具体的操作步骤:
1. 设置信号处理函数:
$SIG{ALRM} = \&timed_out;
- 设置闹钟:
alarm(10);
- 进行阻塞读取:
超级会员免费看
订阅专栏 解锁全文
655

被折叠的 条评论
为什么被折叠?



