gpt4 book ai didi

perl - 以 exec() 结束时强制 Perl 调用 END 子例程?

转载 作者:行者123 更新时间:2023-12-05 00:58:04 25 4
gpt4 key购买 nike

当您使用 exec()在 Perl 中:

Note that exec will not call your END blocks, nor will it invoke DESTROY methods on your objects.



如何强制 perl调用 END反正 block ?我可以做一些类似 END(); exec($0) 的事情吗?管他呢?

我真的试图让程序结束其当前实例并启动一个全新的自身实例,并且懒得正确执行此操作(使用 cron 或将整个程序置于无限循环中)。但是,我的 END 子例程会清理临时文件和其他重要的东西,所以我需要它们在执行之间运行。

无用的代码链接:

https://github.com/barrycarter/bcapps/blob/master/bc-metar-db.pl

https://github.com/barrycarter/bcapps/blob/master/bc-voronoi-temperature.pl

https://github.com/barrycarter/bcapps/blob/master/bc-delaunay-temperature.pl

最佳答案

所以你想在你的脚本中执行一个程序? exec那时可能不是你想要的。 exec行为类似于 C exec :所谓的替换您当前的流程;要继续前进,您必须执行 fork 之类的操作在执行另一个进程时保留当前进程。

不过好消息!这一切都存在于 system 内置。

Does exactly the same thing as exec LIST , except that a fork is done first and the parent process waits for the child process to exit.



这是它的样子:
use 5.012; # or use 5.012 or newer
use warnings;

... # some part of my program

system($my_command, $arg1, $arg2); # forks, execs, returns.

END {
# still gets called because you never left the script.
}

如果您绝对必须使用 exec ,您必须自动调用您的清理例程。了解更多关于 END ,见 perldoc perlmod完整的细节。简称: END是在脚本执行的特定阶段执行的几种类型的代码块之一。它们不是子程序。但是,您可以在这些子例程中执行您想要的任何代码。所以你可以这样做:
sub cleanup { ... } # your cleanup code

sub do_exec {
cleanup();
exec( ... );
}

END {
cleanup();
}

然后你知道你的清理代码将在脚本退出或执行时执行。

关于perl - 以 exec() 结束时强制 Perl 调用 END 子例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com