# Utility to run given Perl program line by line and print out # values as comments (for annotation) # Strictly brute-force. Watch out for side-effects! # # Vim users can use this like: # vmap <F9> !perl annotate.pl<CR> # nmap <F9> :.!perl annotate.pl<CR> use strict; package Annotate; # keep my own namespace so as not to pollute main use Data::Dumper(); $Data::Dumper::Indent = 0; $Data::Dumper::Terse = 1; $Data::Dumper::Useqq = 1; # these are locals so they're not visible in the evals. use vars qw(@program @sresults @aresults $programText $i $sresult @are +sult); while (<>) { s/[\n\r\s]+$//; s/\s*##=> (?:array|scalar).*//; push ( @program, $_ ); } # set up Perl defaults: $programText = "no strict; package main;"; for $i ( 0 .. $#program ) { $programText .= $program[$i] . "\n"; $sresult = eval $programText; next if $@; @aresult = eval $programText; if ( @aresult == 1 && $aresult[0] == $sresult ) { $sresults[$i] = $sresult; } elsif ( scalar(@aresult) == $sresult ) { $aresults[$i] = [@aresult]; } else # different scalar and array results { $sresults[$i] = $sresult; $aresults[$i] = [@aresult]; } } die "error: $@" if $@; sub result { Data::Dumper->Dump( [shift] ) } for $i ( 0 .. $#program ) { print $program[$i]; if ( $program[$i] =~ /^[^#]*;(\s*#.*)?$/ && ( defined( $sresults[$i] ) || defined( $aresults[$i] ) ) ) { print "\t##=>"; print " scalar: ", result( $sresults[$i] ) if defined( $sresul +ts[$i] ); print " array: ", result( $aresults[$i] ) if defined( $aresul +ts[$i] ); } print "\n"; }

In reply to Annotate Perl code with return values by bikeNomad

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.