A VERY naive D::D implementation:
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;
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);
}
}
1;
On Fri, Jan 13, 2012 at 6:11 PM, David Mertens <[email protected]> wrote:
> I said token, but I meant function. No Devel::Declare here.
>
> On Jan 13, 2012 6:00 PM, "David Mertens" <[email protected]> wrote:
>>
>> Yeah, this should work, I think, though I would prefer the token last,
>> latest, or recent. We would obviously have to be careful about exporting
>> such a basic token. We would do something like
>>
>> use PDL::Latest;
>> $a->mv(0,-1)->rotate(3)->where(latest > 3);
>> no PDL::Latest;
>>
>> The method would return the last piddle modified, which itself could be
>> stored in the package global $PDL::last_modified_piddle. This gives function
>> authors control over the "latest" behavior of their functions. It would also
>> require that all current PDL functions would need to be retrofitted with
>> this behavior.
>>
>> This short example seems like overkill, but in larger cases, or cases in
>> which the user doesn't have conflicts, it would be nice.
>>
>> David
>>
>> On Jan 13, 2012 5:35 PM, "Chris Marshall" <[email protected]> wrote:
>>>
>>> A source filter would be the simplest. Maybe another
>>> clever way could be found, perhaps have the self() set
>>> from the pdl output of the previous PDL method call or
>>> routine.
>>>
>>> --Chris
>>>
>>> On Fri, Jan 13, 2012 at 2:57 PM, Joel Berger <[email protected]>
>>> wrote:
>>> >> $a->mv(0,-1)->rotate(3)->where(self>3)
>>> >
>>> > How on earth would you do that? Perhaps with a source filter, but
>>> > unless you were going to make singleton objects I can't think of how
>>> > one would implement that.
>>> >
>>> > Joel
>>>
>>> _______________________________________________
>>> Perldl mailing list
>>> [email protected]
>>> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
_______________________________________________
Perldl mailing list
[email protected]
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl