繁体   English   中英

如何在Perl数组或标量中存储git命令的输出?

[英]How do I store output of a git command in a Perl array or scalar?

在我的代码中我有

git diff --numstat

我知道我可以创建一个文件

git diff --numstat > log.log

但是甚至可以将它传递给某种数组或标量? 我在想这样的事情,但我不确定它为什么不编译。

my @array;
push (@array, git diff --numstat);

使用反引号,也称为qx //

  • qx/STRING/
  • `STRING`
    一个字符串(可能)插入然后作为系统命令执行,带有/bin/sh或其等价物。 壳牌通配符,管道和重定向将受到尊重。 返回收集的命令标准输出; 标准错误不受影响。 在标量上下文中,它作为单个(可能是多行)字符串返回,如果命令失败则返回undef 在列表上下文中,返回行列表(但是您已使用$/$INPUT_RECORD_SEPARATOR定义行),如果命令失败,则返回空列表。

您有选项,哪个更好取决于您想要对输出做什么。

要将所有标准输出读入标量,请在标量上下文中使用运算符

$output = `git diff --numstat`;

在列表上下文中,默认值为$/ ,perl将输出拆分为单独的行。 如果要将git输出附加到现有数组的末尾,请使用push ,如下所示

push @array, `git diff --numstat`;

虽然你在你的问题中特别提到了push特,但是我很难想象你为什么要把git的输出与其他东西混合在一起。 将输出直接存储在数组中更简单:

@array = `git diff --numstat`;

请注意,返回的行列表保留其行尾字符。 要创建一个新数组并删除一行中的所有换行符,请写入

chomp(@array = `git diff --numstat`);

甚至

chomp(my @array = `git diff --numstat`);

如果你在use strict下运行

错误处理

对于计划使用多次或两次的代码,您应该检查`git diff --numstat` ,或者您要读取其输出的任何其他命令实际上是否成功。 否则,启用warnings编译指示后,您将看到许多有关未定义变量或缺少输出的诊断消息。

在标量上下文中,失败将返回未定义的值。 检查它

my $output = `git diff --numstat`;
die "$0: git may not be installed" unless defined $output;

列表上下文中的失败会生成一个空列表。

my @output = `git diff --numstat`;
die "$0: git may not be installed" unless @output;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM