Acme-Backwards
view release on metacpan or search on metacpan
lib/Acme/Backwards.pm view on Meta::CPAN
use Keyword::Declare;
sub import {
keytype OKAY is m{(?:fisle (?&PerlNWS)(?&PerlExpression).*?;|esle (?&PerlNWS).*?;)?+}xms;
keyword rof (/(my\s*\$\w+)?/ $declare, Expr $test, /.+?;$/ $code) {_backwards('for', ($declare ? $declare : ()), $test, $code);};
keyword fi (Expr $test, /.+?;/ $code, OKAY @next) {_backwards('if', $test, $code)._process_backwards(@next);};
keyword sselnu (Expr $test, /.+?;/ $code, OKAY @next) {_backwards('unless', $test, $code)._process_backwards(@next);};
}
sub _process_backwards {join' ',map{$_=~m/(fisle|esle)(.*)$/;return"_$1"->($2)}@_;}
sub _esle {_backwards('else','',shift)}
sub _fisle {shift=~m/\s*((?&PerlExpression))\s*(.*?;) $PPR::GRAMMAR/gxm;_backwards('elsif', $1, $2);}
sub _backwards {scalar@_>3?sprintf"%s %s %s { %s }",@_:sprintf"%s %s { %s }",@_;}
1;
__END__
=head1 NAME
Acme::Backwards - One line fi, esle, fisle, sselnu, rof
=head1 VERSION
lib/Acme/Backwards.pm view on Meta::CPAN
sselnu ( $str eq 'forwards' ) say $str;
fi ( $str eq 'forwards' ) say $str;
fisle ( $str eq 'backwards' ) say $str;
esle die $str;
my $int = 0;
rof (qw/1 2 3/) $int += $_;
rof my $var (qw/4 5 6/) $int += $var;
rof my $nest (qw/7 8/) fi ($nest == 7) print "one"; esle print "line";
=head1 EXPORTS
=head2 fi
if
=head2 fisle
elsif
t/00-load.t view on Meta::CPAN
#!perl -T
use 5.006;
use strict;
use warnings;
use Test::More;
plan tests => 1;
BEGIN {
use_ok( 'Acme::Backwards' ) || print "Bail out!\n";
}
diag( "Testing Acme::Backwards $Acme::Backwards::VERSION, Perl $], $^X" );
use Test::More;
use Acme::Backwards;
rof (qw/a b c/) ok($_) and print $_ . "\n";
my $int = 0;
rof my $thing (qw/1 2 3/) do {ok($thing)} and $int += $thing;
is($int, 6);
rof my $other (qw/1 2/) fi ($other == 1) is($other, 1); esle is($other, 2);
done_testing(9);
( run in 0.456 second using v1.01-cache-2.11-cpan-de7293f3b23 )