perl - 无法从 git pull 的输出创建数组
问题描述
use Cwd;
use strict;
use warnings;
no warnings 'numeric';
chdir("/root/dev/git_repo");
qx{git checkout master};
my $pull = qx{git pull};
if ($pull != "Already up-to-date."){
my @output = $pull;
chomp @output;
foreach my $line (@output)
{
print "<<$line>>\n";
}
}
if ($pull == "Already up-to-date.")
一切都很好,但是
if ($pull != "Already up-to-date."){
那么我将无法进入循环,我无法将输出正确转换为数组。我尝试了其他的东西,比如split /^/m, $pull
.
我需要能够解析它才能获得我需要的文件。我不想使用任何外部库,因为我必须在未连接到 Internet 的旧服务器上使用此脚本。
解决方案
这是您的代码的简化版本:
use Cwd;
use strict;
use warnings;
chdir("/root/dev/git_repo");
qx{git checkout master};
my @lines = qx{git pull};
chomp @lines;
if ($lines[0] ne 'Already up-to-date.') {
foreach my $line (@lines) {
print "<<$line>>\n";
}
}
您可以使用qx
. 这消除了对多个变量的需要。
在我的系统上,qx{git pull}
返回附加Already up-to-date.
换行符 ( )。\n
你的也可以。如果是这样,您的比较将失败。
!=
仅用于数字比较,但您正在尝试进行字符串比较。您会收到一条警告消息,但您故意使用此行抑制了该警告:
no warnings 'numeric';
该警告告诉您,您的比较不会按预期进行。由于这是您的问题的主要来源,因此不要抑制该警告。Perl 警告几乎总是意味着您的代码中有错误。
您的代码的另一个问题是这一行:
my @output = $pull;
它用单个项目填充数组变量。它不会神奇地将git
输出分成几行\n
。
推荐阅读
- android - 如何更改任何矩形可绘制的角的颜色?
- wso2 - 在 WSO2 IS 5.10 中关联和链接用户帐户
- r - emmfcn(...) 中的错误:变量“CO2”不在 r 的数据集中
- ios - 有没有办法在不重置添加的最后一个视图的位置的情况下向 Xcode 添加子视图?
- macos - WebRTC 捕获 NSCursor 图像导致内存泄漏
- ios - 我们是否应该继续在 iOS 中明确地将变量捕获为弱变量
- kubernetes - 使用 Prometheus 监控 AKS(Azure Kubernetes 服务)无法发现 Kubelet 组件
- c++ - 无法递归创建 C++ 数组
- dart - Dart 最佳实践,我们应该在参数中提供类型注释吗?
- ruby - 如何在ruby中将数组转换为字符串