簡體   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