Devel::Declare is a compile-time thing, so unless `eval`s have a compile
phase, I don't think that it will work in the pdl shell.

Further, at least my implementation is very hueristic based. I'm sure it
could be made better.

Anyway all that said, it should work just like the previous examples. Here
is a simple one:

#!/usr/bin/env perl

use strict;
use warnings;

use Latest;

my $pdl = xvals(7);

my $where = $a->where(latest > 3);

print $where

On Wed, Jan 18, 2012 at 8:18 PM, chm <[email protected]> wrote:

> Hi Joel-
>
> Do you have an example that shows this
> implementation working?  Would this
> be something you load in the PDL shell?
>
> Thanks,
> Chris
>
>
> On 1/13/2012 7:45 PM, Joel Berger wrote:
>
>> 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<dcmertens.perl@gmail.**com<[email protected]>>
>>  wrote:
>>
>>> I said token, but I meant function. No Devel::Declare here.
>>>
>>> On Jan 13, 2012 6:00 PM, "David 
>>> Mertens"<dcmertens.perl@gmail.**com<[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"<devel.chm.01@gmail.**com<[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

Reply via email to