【问题标题】:calling a perl script from another script [closed]从另一个脚本调用perl脚本[关闭]
【发布时间】:2012-12-17 12:30:25
【问题描述】:

我需要从另一个脚本调用 perl 脚本。约束是,在 .pm 文件中定义的全局变量很少在两个脚本之间是通用的,但局部变量不共享。请告诉我该怎么做

【问题讨论】:

  • 根本不清楚你真正需要什么。请详细说明。
  • 你需要包含一些代码!!当您确实想分享您的代码时,请编辑您的问题并更新它。通知我们之一,然后重新打开您的问题。如果需要格式化或任何其他方面的帮助,我们可以为您提供帮助。 (只需输入您的相关代码,我们将为您格式化)
  • 很抱歉没有完成我的问题。示例代码如下: caller.pl use my::module; $global_var = 1; #需要改变这个系统("called.pl");打印 $global_var;调用.pl 使用 my::module; $global_var=2;我希望运行 caller.pl 的输出为 2。请注意 global_var 在 my::module 中
  • 抱歉格式化。我是在手机上做的,但我没有太多可用的格式选项

标签: perl


【解决方案1】:

您有什么理由不能将第二个脚本中的代码作为第一个脚本中的函数调用吗?它应该作为单个程序工作,因此共享全局变量。

查看How do I include functions from another file in my Perl script? 了解将一个脚本包含到另一个脚本中的各种方法。

【讨论】:

    【解决方案2】:

    这取决于您希望它如何工作。

    如果您想在进程之间共享全局变量,那么您就可以“享受”了。您将需要共享内存 (shmget) 或其他一些 IPC(进程间通信)机制,请参阅 perldoc perlipc。有趣的部分是同步这两个进程,这样它们就不会尝试同时更新相同的东西。如果可以避免的话,你真的不想去那里。

    更简单的是,如果您只想将这些全局值传递给第二个进程,以便它可以获取自己的副本。如果这些值是简单的文本,那么您可以将它们作为命令行参数(从@ARGV 读取它们)或作为环境变量(%ENV)传递。但是,如果它们更奇特,例如引用或文件句柄,那么您需要找出不同的协议。假设您不使用 Windows,使用 fork(您可能不需要 exec)创建子进程可能是一种更简单的方法。

    更好的是,考虑一下您是否确实需要复制或共享这些全局变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多