perl - 'echo' 在 perl 变量声明中做什么?

标签 perl

我正在努力将一个过时的文件从 perl 转录到 python,并且遇到了一些 perl 语法。

my $jobID = `echo \$JOBID`;
chomp($jobID);
unless ($jobID) {
  print "Please specify a job\n";
  exit;
} 

到目前为止,我已经能够非常轻松地转录所有命令行解析,但我非常清楚这段代码到底在做什么(特别是在线声明中的 echo 1).

在 perl 脚本 cmd 行解析选项中 - 允许设置 jobID - 它声明“默认 = $JOBID”。所以我的假设是这段代码的第一行只是设置这个默认的 jobID,直到指定了一个。

如果是这种情况,为什么需要在变量默认声明中使用 echo?这是 perl 中的良好做法还是我错过了更大的画面?

我已尝试为此进行低级和高级搜索,但似乎无法通过 google ninja 找到任何有用的东西。

如果您对“回声”有任何帮助,我们将不胜感激(或对此有任何好的阅读)!

最佳答案

这是从 shell 变量获取值的一种方法。反引号 (`) 运行 shell 命令并为您提供输出。所以 echo 在 shell 内部运行,在这种情况下它只返回一个 shell 变量。在 Perl 中获得它的更简洁的方法是像这样使用 %ENV:

 my $jobID = $ENV{'JOBID'};

这也消除了对 chomp 的需要,避免创建额外的进程,并且效率更高。

关于perl - 'echo' 在 perl 变量声明中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32467976/

相关文章:

perl - 无法在 CentOS 7.3 上使用 Yum 安装 CPAN

perl - 空数组引用上的模板工具包IF返回true,我可以将其设置为false吗?

perl - 如何从 Perl 快速访问许多大型 CSV 文件中的数据?

regex - 从 Perl 中的字符串中删除换行符

perl - 如何通过套接字共享 Perl 数据结构?

perl - 如何在 Web 服务器上运行 Perl?

regex -/m 修饰符的 perl 正则表达式意外行为

perl - 如何在 perl 中以秒为单位获取日期差异

perl - 安装 perl 模块时 cpan 不使用配置的存储库而是尝试连接到 cpan.org

perl - 如何强制逻辑或运算符的列表上下文