在我的代码中我有
git diff --numstat
我知道我可以用
创建一个文件git diff --numstat > log.log
但是甚至可以将它传递给某种数组或标量?我在想这样的事情,但我不确定为什么它不能编译。
my @array;
push (@array, git diff --numstat);
答案 0 :(得分:1)
使用反引号,通常也称为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;