in reply to Semantic diff for Perl code
The most clever strategy I have seen was also based on version-control – MS Source Safe – and it worked by analyzing the deltas. It looked for references to a subroutine-name within the blocks of changed text. It also examined the human comments which accompanied each revision ... what the developer said about it ... and the number of times a particular block of source code was changed within a small amount of time. There was some "smarts" about calculating how a particular line-number might have changed due to insertions and deletions that surrounded it. But this code was all being done in-house (by the developers at one cell-phone company that had acquired another one), and I never knew of anything to be released.