The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Acme::BottomsUp;

use warnings;
use strict;

our $VERSION = '0.02';

use Filter::Simple;
use PPI;

FILTER {
  my $doc = PPI::Document->new(\$_);
  $_ = join '',
	map {
	  my $s = $_->content;
	  $s =~ s/;\s*$//s;
	  join("\n",
	      reverse
	      split "\n",
		$s
	  ) . "\n;"
	}
	@{ $doc->find('PPI::Statement') };
};

1;

=pod

=head1 NAME

Acme::BottomsUp - Write individual statements backwards

=head1 VERSION

Version 0.02

=head1 SYNOPSIS

	my @arr = (1..10);
	
	use Acme::BottomsUp;
	@arr                  # first, start w/ numbers
	  grep { $_ % 2 }     # then get the odd ones
	  map { $_**3 }       # then cube each one
	  join ":",           # and glue together
	  print               # lastly, display result
	;
	print "ok";
	no Acme::BottomsUp;

=head1 DESCRIPTION

This module allows you to write multi-line perl statements in reverse order so that it "reads better".  For example, normally one would write the code from the SYNOPSIS as:

	my @arr = (1..10);
	
	print                 # lastly, display result
	     join ":",        # and glue together
	     map { $_**3 }    # then cube each one
	     grep { $_ % 2 }  # then get the odd ones
	     @arr		# first, start with numbers
	;

=head1 PREREQUISITES

=over 4

=item *

L<Filter::Simple>

=item *

L<PPI>

=back

=head1 SEE ALSO

L<http://perlmonks.org/?node_id=567298> - Original location for RFC

=head1 AUTHOR

David Westbrook (davidrw), C<< <dwestbrook at gmail.com> >>

=head1 BUGS

Please report any bugs or feature requests to
C<bug-acme-bottomsup at rt.cpan.org>, or through the web interface at
L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Acme-BottomsUp>.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.

I'm also available by email or via '/msg davidrw' on L<http://perlmonks.org>.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Acme::BottomsUp

You can also look for information at:

=over 4

=item * AnnoCPAN: Annotated CPAN documentation

L<http://annocpan.org/dist/Acme-BottomsUp>

=item * CPAN Ratings

L<http://cpanratings.perl.org/d/Acme-BottomsUp>

=item * RT: CPAN's request tracker

L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Acme-BottomsUp>

=item * Search CPAN

L<http://search.cpan.org/dist/Acme-BottomsUp>

=back

=head1 COPYRIGHT & LICENSE

Copyright 2006 David Westbrook, all rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=cut