-1

我有一个巨大的文件,不幸的是我无权访问。当我运行 perl 文件时,我希望它在某个命令处停止。每次在文件中看到“香蕉”时,我都希望进程停止执行。有没有办法在不更改原始文件的情况下做到这一点。我尝试在 perl 中使用管道,但无济于事,在我的程序发现遇到第一个香蕉之前,该过程已经完成。当执行到达此命令时,我需要终止该进程:

banana 1;

并杀死进程。那是代码中的原始命令。如果我尝试解析,我可以找到该命令所在的行号。

编辑:我只需要停止该过程,然后我就可以执行一个文件。文件完成后。我从停止它的点开始运行停止的进程。我确实有该文件,并且使用通用密码我可以访问该文件。我只是无法改变它。这就是我知道文件是用perl编写的。我可以使用脚本运行调试器吗?

4

2 回答 2

1

你的问题并不完全清楚,但如果我理解你,你有一个非常大的 perl 脚本,其中有一个子例程banana。当 perl 脚本正在运行并遇到此子例程时,您希望它停止。

您可以尝试从标准输入运行 perl,然后修改管道上的脚本。通过附加banana子例程的新定义(如果在警告的情况下运行,则可能会报告警告)或将所有调用替换bananaexit

% echo 'sub banana { printf("slipped!\n"; _exit; }' > extra.pl
% cat <script> extra.pl | perl

或者

% cp script.pl tmp.pl
% echo 'sub banana { printf("slipped!\n"; _exit; }' >> tmp.pl
% perl tmp.pl <args>
% rm tmp.pl

或者

% cat <script> | perl -pe 's/\bbanana\b/exit/g' | perl
于 2013-07-23T00:24:36.333 回答
0

给自己一个信号。

sub banana {
   kill 20 => $$;
}

20 是 Linux 上 TSTP 的信号编号;可能因 Unix 变体而异。

于 2013-07-22T22:33:11.867 回答