【问题标题】:how to execute a shell command inside of a perl sub routine?如何在 perl 子例程中执行 shell 命令?
【发布时间】:2011-08-22 22:36:08
【问题描述】:

如果我通过子例程调用它,如何在 perl 中执行 shell 命令?

例如,我可以在命令行上运行它来获取特定值:

mycert-util --show test.user.myuser_cd

我想在 perl 子例程中运行这个命令并调用它。例如我的例程是get_auth,我想打印出get_auth的值。

代码:

use strict;
use warnings;

#&get_auth;  
#get_auth();

print "The value is: get_auth() \n";

sub get_auth
{
  $exec=`mycert-util --show test.user.myuser_cd`; 
}

【问题讨论】:

  • 您展示的代码不是按您希望的那样工作吗?如果没有,您希望的行为是什么,它会做什么?
  • 顺便说一下,perl 不会在双引号字符串中插入子例程调用,所以它应该是"The value is: ".get_auth()." \n"。 (并且它必须在子定义之后才能被识别)。但这与子程序 in 中的 shell 命令无关。

标签: perl


【解决方案1】:

您的问题不在于潜艇,而在于您如何称呼它。您不能在引号内放置子调用。下面是一些等效的替代功能。

use feature qw(say);
say "The value is: ", get_auth();

sub get_auth {
   return qx(mycert-util --show test.user.myuser_cd); 
}

【讨论】:

  • featuresay 在 perl 5.8 中?
  • 我会这么认为。试试看。
  • 可能是 v5.10 及更高版本.. 没什么大不了的,打印效果也一样。但是为什么不更新呢?
【解决方案2】:

看起来你可能需要返回你的 $exec 变量然后正确输出它:

sub get_auth
{
  $exec=`mycert-util --show test.user.myuser_cd`; 
  return $exec;
}

print "The value is: " . get_auth() . "\n";

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多