[英]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.