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