Skip to content

Instantly share code, notes, and snippets.

@jberger
Created January 19, 2012 04:27
Show Gist options
  • Save jberger/1637872 to your computer and use it in GitHub Desktop.
Save jberger/1637872 to your computer and use it in GitHub Desktop.
Naive Latest.pm implementation using Devel::Declare
package Latest;
use strict;
use warnings;
use Devel::Declare ();
my $keyword = 'latest';
sub import {
my $class = shift;
my $caller = caller;
Devel::Declare->setup_for(
$caller,
{ $keyword => { const => \&parser } }
);
no strict 'refs';
*{$caller.'::'.$keyword} = sub (@) {return @_};
}
sub parser {
my $linestr = Devel::Declare::get_linestr;
warn "Parser got: $linestr";
die "Too confusing" if do {
my @ops = $linestr =~ /(latest)/g;
@ops > 1;
};
if ($linestr =~ /(\$\w+)->/) {
my $latest = $1;
$linestr =~ s/latest/latest $latest/;
warn "Rewritten: $linestr";
Devel::Declare::set_linestr($linestr);
} else {
warn "Could not find keyword";
}
}
1;
__END__
use example:
#!/usr/bin/env perl
use strict;
use warnings;
use Latest;
use PDL;
my $pdl = xvals(7);
my $where = $pdl->where(latest > 3);
print $where
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment