No built-in functions (abundant use of Perl's operators, though).

Yes, there's a spark of evil. But "they" always say that the easiest way is to divide a problem into smaller sub-problems:

sub rec_reverse { return $_[0] if $_[0] eq ''; my( $char, $smaller_problem ) = $_[0] =~ m/\A(.)(.*)\z/s; return rec_reverse( $smaller_problem ) . $char; } print rec_reverse( "Hello\nworld." ), "\n";

I wouldn't call it sophisticated or elegant though, and if it were turned in as ones own work, it would probably merit some skepticism. Recursion is not an optimal approach here, since the number of recursive calls will match the length of the string, and each call added to the call-stack has a cost. Also, the regexp contortion as a means of eliminating any "built-in" functions (ie, substr) does nothing to dispel the rumor that Perl is difficult to read.

I find with recursion that it always helps me to think through it by thinking in terms of "problem" and "smaller_problem". I'm always tempted to write recursion like this:

sub rec_reverse { my $problem = shift; if( $problem eq '' or ! defined $problem ) { return $problem; # Can't be made smaller. End case. } else { my( $char, $smaller_problem ) = $problem =~ m/\A(.)(.*)\z/s; return rec_reverse( $smaller_problem ) . $char; } }

Which is the same thing but more explicit, and possibly more readable (and possibly less, since we've lost variable names that look like strings).


Dave


In reply to Re^2: reverse a string in place by davido
in thread reverse a string in place by Priti24

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.