Text::Diff usage question

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

I would like to compare two arrays of lines. If the arrays
are different, I want to output the differences in human-readable
form, and also call a function f().

I think that Text::Diff, found on CPAN, would useful. Indeed it
works, but my code looks a bit cumbersome and I wonder whether
one can make it easier:

# Compare the arrays
my @status_diff=Text::Diff::diff(\@after,\@before);

unless(@status_diff eq 0
   || (@status_diff eq 1 and length($status_diff[0]) eq 0))
  # Lines differ
  print(@status_diff); # print differences
  f() # call f

What looks a bit complicated is the condition inside the "unless".
Even on identical arrays, diff returns an array of 1 string of
zero length. But I can't simplify it to, say

if(length($status_diff[0])) { print(...); f() }

because I could imagine that there are cases where diff
returns an empty list or even undef (I didn't find anything
in the diff documentation which guarantees that the output
is always an array of at least one string, when the default
formatter is used - or did I overlook something here in the

Any suggestion how I could write this in a better way?


Posted via http://www.newsoffice.de /

Re: Text::Diff usage question

Ronald Fischer wrote:
Quoted text here. Click to load it

I don't know what docs you have, but mine say:

    [Synopsis] my $diff = diff \@records1,  \@records2;
    [Output] If no OUTPUT is supplied, returns the diffs in a string

which leads me to believe your array will only ever have one element -
it just may or may not be defined.


Re: Text::Diff usage question

DJ Stunks schrieb:
Quoted text here. Click to load it

I overlooked this. Thank you for pointing it out.

This makes the comparision a little bit simpler,
although it would be better IMO if the docs ensure exactly how
the result will look like when the arrays are equal (from the code
you can see that the output will be the string "" in such a case,
but this is not the same as documenting this fact - because if
it is documented, one can expect it to be part of the interface
and that it will stay the same in future versions of this module).


Re: Text::Diff usage question

ro.naldfi.scher@gmail.com wrote:
Quoted text here. Click to load it

the comparison is much simpler:  if ( $diff ne q{} ) { #different...

I agree the module documentation should be updated to include the
return value of diff().  You should contact Barry and let him know.


Quoted text here. Click to load it

Site Timeline