NAME Devel::OptreeDiff - Produces diffs of optrees SYNOPSIS use Devel::OptreeDiff 'fmt_optree_diff'; use Data::Dumper 'Dumper'; print map "$_\n", fmt_optree_diff( sub { print @_ or die $! }, sub { print @_ } ) ); - /leavesub/lineseq/nextstate*print + /leavesub/lineseq/nextstate*null + .op_flags = 4 + .op_private = 1 + .op_targ = 0 + /leavesub/lineseq/nextstate*null/or + .op_flags = 4 + .op_other = 0 + .op_private = 1 + .op_targ = 0 + /leavesub/lineseq/nextstate*null/or/print - /leavesub/lineseq/nextstate*print/pushmark + /leavesub/lineseq/nextstate*null/or/print/pushmark - /leavesub/lineseq/nextstate*print/pushmark*rv2av + /leavesub/lineseq/nextstate*null/or/print/pushmark*rv2av - /leavesub/lineseq/nextstate*print/pushmark*rv2av/gv + /leavesub/lineseq/nextstate*null/or/print/pushmark*rv2av/gv + /leavesub/lineseq/nextstate*null/or/print/pushmark*rv2av/gv.op_flags = 2 + .op_private = 0 + .op_targ = 0 + /leavesub/lineseq/nextstate*null/or/print*die + .op_flags = 6 + .op_private = 1 + .op_targ = 2 + /leavesub/lineseq/nextstate*null/or/print*die/pushmark + .op_flags = 2 + .op_private = 0 + .op_targ = 0 + /leavesub/lineseq/nextstate*null/or/print*die/pushmark*rv2sv + .op_flags = 6 + .op_private = 1 + .op_targ = 15 + /leavesub/lineseq/nextstate*null/or/print*die/pushmark*rv2sv/gvsv + .GV = main::! DESCRIPTION Runs Algorithm::Diff against two functions. OPTIONAL EXPORTS fmt_optree_diff( \&code_a, \&code_b, ... ) This is like optree_diff except that it returns a list of nicely formatted text descriptions of the changes to the optree. optree_diff( \&code_a, \&code_b, ... ) A wrapped call to Algorithm::Diff::diff(). fmt_optree_diff uses this as input. optree_sdiff( \&code_a, \&code_b, ... ) Algorithm::Diff::sdiff( ... ) optree_traverse_sequences( \&code_a, \&code_b, ... ) Algorithm::Diff::traverse_sequences( ... ) optree_traverse_balanced( \&code_a, \&code_b, ... ) Algorithm::Diff::traverse_balanced( ... ) SEE ALSO AUTHOR Joshua b. Jore COPYRIGHT AND LICENSE B::Keywords supplies seven arrays of keywords: @Scalars, @Arrays, @Hashes, @Filehandles, @Symbols, @Functions and @Barewords. The @Symbols array includes the contents of each of @Scalars, @Arrays, @Hashes and @Filehandles. Similarly, @Barewords adds a few non-function keywords (like __DATA__, NULL) to the @Functions array. All additions and modifications are welcome.