【问题标题】:Exiting a secondary Perl script and returning to the main program退出辅助 Perl 脚本并返回主程序
【发布时间】:2015-08-12 15:52:01
【问题描述】:

我正在运行一个 Perl 脚本来控制另外两个脚本。主程序的用户可以通过下面这行调用两个辅助脚本。

do 'Task_A.pl';

脚本然后运行 ​​Task_A.pl 但我想找到一种方法然后退出 Task_A.pl 并返回到主程序。如果可能的话,我想返回上次调用辅助脚本的函数。我不确定这叫什么,但我感谢任何可能的解决方案的意见。

这是整个主程序,目前不多。

my $selecion;

#Looping variables.
my $program_loop = 1;

while ($program_loop == 1)
{
    print "Please choose one of the programs listed in the menu.\n";

    #Program menu where the user chooses from the presented options.
    print "[1] - Script A.\n";
    print "[2] - Script B.\n";
    print "[3] - Exit program.\n";

    my $user_input = <>;

    if ($user_input == 1) # <-- Scrip_A.pl
    {
        do 'Task_A.pl';
    }
    elsif ($user_input == 2) # <-- Scrip_B.pl
    {
        do 'Task_B.pl';     
    }
    elsif ($user_input == 3) # <-- Exit Program
    {
        #The user can choose to exit from the menu.
        print "The program will now exit.\n";
        exit;
    }
}

【问题讨论】:

  • 程序员不用die,他们只是GOSUB 没有RETURN
  • 我认为您真正想要做的是使用函数调用。 do 很可能是个糟糕的主意。请显示更多实际代码。也不清楚主脚本的用户(是程序员)如何调用辅助脚本。
  • 我也是这么想的。使用 do 可能不是最好的方法,但我不确定我的选择是什么。
  • 如果没有必要的共享内存/变量,启动一个新进程。或者,将您的两个程序重构为共享相同接口并使用它们的模块。如果有很多全球遗留问题正在发生,这将很难。由于您的程序没有use strictuse warnings,我会假设是这种情况。你为什么要这样做?
  • 一般来说,如果你使用do,你就做错了。

标签: perl


【解决方案1】:

do 不会启动另一个进程。如果这是您想要的,请使用“system()”。

如果您想要,那么最好将所有内容放入要评估的文件中的函数中,并在文件末尾调用该函数。

使用“return”离开函数并在do之后返回下一条指令。

【讨论】:

  • 我试过了,但不知何故 Task_A.pl 程序只是退出而不返回主程序。
  • 您需要了解do 的作用。它不是一个 fork 或一个子进程,它只是在文件中啜饮并在适当的位置运行它。一遍又一遍,如果你决定这样做。
  • 是的,几十年没用过 :-)
  • 我将它与 BLOCK 一起使用。但不是文件。
  • 我认为您可以通过稍微格式化它来大大改进答案,链接到system 的 perldoc 并用一个小例子解释为什么会这样。请注意,我没有否决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
相关资源
最近更新 更多