他の人が述べているように、chompは削除された文字数を返します。私の特定の例(1行のperl replace-in-fileステートメントでeval修飾子を使用した正規表現)では、個別のprintステートメントを使用せずに、単一のステートメントでchomped値を取得する必要がありました。私はついに実用的な解決策を見つけました-ifステートメントでchompコマンドをラップします。
で始まります:
$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/`git log | grep -i '^commit' | wc -l`/e;
print $in;
これは次を返します:
I have 256
commits in my log
素晴らしい、私はこれを切り刻む必要があるので、私は試してみます:
$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/chomp `git log | grep -i '^commit' | wc -l`/e;
print $in;
しかし、これはエラーをスローします:
Can't modify quoted execution (``, qx) in chomp at ./script line 4, near "`git log | grep -i '^commit' | wc -l`}"
Execution of ./script aborted due to compilation errors.
ええ、それで私は出力をローカル変数に割り当ててそれを切り刻む必要があります:
$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/chomp (my $VAR = `git log | grep -i '^commit' | wc -l`)/e;
print $in;
しかし、前述したように、chompは削除された文字数を返します。
I have 1 commits in my log
次に、それをifステートメントでラップして、結果を返すようにすることができることがわかりました。
$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/if (chomp (my $VAR = `git log | grep -i '^commit' | wc -l`)) { $VAR }/e;
print $in;
最後に、1つのステートメントでコマンド結果を取得します。
I have 256 commits in my log