For instance, svn blame is one tool that comes with Subversion to do this - but of course since Subversion is so generally deficient it can't trace through merges.
If you've done the sensible thing and converted the repository to git using git-svn, and successfully converted the merges, then git blame, the emacs git-blame.el, gitk visualisation of the history of the file, etc, can all be used and will correctly identify the change that introduced a line of code and not the one it was merged in with. No doubt the same thing applies to conversions to other suitable capable VCS such as Mercurial, bzr, etc.
SVK and svnmerge have conventions for how they represent this information which does not suffer from the above problem. You could have easily picked from one of those, it would have been just as easy.
$h=$ENV{HOME};my@q=split/\n\n/,`cat $h/.quotes`;$s="$h/."
."signature";$t=`cat $s`;print$t,"\n",$q[rand($#q)],"\n";