2012-05-04 11 views
3

2つのテキスト文字列を比較し、その違いを色で表示したいと考えています。私はString::Diffを試しましたが、違いを色で表示することができませんでした。 ANSIカラーなどの色の違い
編集を表示して私を助けていない:ここで私はPerl text diff color

 
$string1 = "This is string 1" ; 
$string2 = "This is string 2" ; 

some_diff_cmd($string1,$string2) ; 

を望む結果が、私はバージョン12

編集、アクティブ状態のPerl 5でWindowsを使用しています私が欲しいの出力(太字のエントリは、カラーの赤と言うにする必要があります)

###文字列は####

がstring1と一致していない=これは文字列 0123です string2 =これは文字列です

+2

コードを表示できますか? –

+0

あなたは[Term :: ANSIColor](http://perldoc.perl.org/Term/ANSIColor.html) –

答えて

5

この状況についてはどうですか?

use Win32::Console::ANSI; 
use String::Diff qw(diff); 

my @strings = (
    'This is string 1', 'This is string 2' 
); 

my $BOLD_RED_MARK = "\e[1;31m"; # or \e[0;31m, if bold is not required 
my $RESET_MARK = "\e[0m"; 

my $diff = String::Diff::diff(@strings, 
    remove_open => $BOLD_RED_SIGN, 
    remove_close => $RESET_SIGN, 
    append_open => $BOLD_RED_SIGN, 
    append_close => $RESET_SIGN, 
); 

print $diff->[0], "\n"; 
print $diff->[1], "\n"; 
+0

を使用することができます。受け入れられた答え、プラス1.スクリプトはそのまま動作しませんでした。エスケープシーケンスと何か関係があります。しかし、 "* _SIGN"変数を二重引用符で囲まれたカラーエスケープシーケンスの値に置き換えると、うまくいきました。ありがとうございました ! – bubbly

+0

もちろん、補間する必要があります。私はそれを書いたときにコードをチェックする手段がありません...それに応じて答えを更新します。 – raina77ow

+0

私は自分自身でエスケープシーケンスを定式化する代わりにTerm :: ANSIColorを使用します。 – ikegami