For reference, the only way I see to improve PDL::NiceSlice beyond the Filter::Simple implementation would be to look at understanding more of the perl syntax (via PPI). It would be nice to have but I think the Filter::Simple approach takes us 99% of the way there...
--Chris On Mon, Oct 10, 2011 at 1:22 PM, Chris Marshall <[email protected]> wrote: > Given that source filters "don't work for eval" and I've > not found any way around that limitation, the most > straightforward fix will be to copy the implementation > of the code_no_comment handling from Filter::Simple > which uses Text::Balanced to do its magic. > > There may be a very clever way to get Filter::Simple > and such to work from eval but I think it will be > much quicker to reimplement/copy and move on... > I observe that that is pretty much what was done > for the current interactive PDL::NiceSlice support. > > --Chris > > On Mon, Oct 10, 2011 at 8:27 AM, chm <[email protected]> wrote: >> On 10/9/2011 11:17 PM, Craig DeForest wrote: >>> >>> This is really cool, thanks very much! >>> >>> In the long term, I hope we eventually just switch >>> over once everyone's happy -- I get very nervous >>> when environment variables get too prominent for >>> interpreting one's code... >> >> The PDL_NICESLICE_ENGINE is there so that >> folks can use/test with and without the new >> engine without changing their code. The >> plan is to go to a parameter in perldl.conf, >> replacing the PDL_NICESLICE_ENGINE run-time >> check by build-time configuration. >> >> The new engine works for program files but >> the translation in perldl and pdl2 evals still >> needs to be implemented. >> >> Basically the code for both engines uses the >> perldlpp routine for the filtering. However, >> the Filter::Simple does some filtering of the >> source *before* handing it off to perldpp. >> That needs to be replicated. It sure would >> be nice if source filters could work in >> evals... >> >> Cheers, >> Chris >> >> >>> On Oct 9, 2011, at 8:35 PM, chm wrote: >>> >>>> PDL::NiceSlice users: >>>> >>>> I just pushed to PDL git a refactoring of the >>>> PDL::NiceSlice source filter to allow for >>>> different filter engines. Thus you can choose >>>> either the original engine based on the >>>> Filter::Util::Call module or the new filter >>>> engine using Filter::Simple by setting the >>>> environment variable PDL_NICESLICE_ENGINE to >>>> the desired engine module name. >>>> >>>> The new engine avoids source filter changes >>>> within perl comments/POD and within most >>>> string contexts (source filtering can still >>>> happen within the / / of a pattern operator. >>>> If this is an issue, just use the m/ / form >>>> instead). >>>> >>>> Here is an example of a test case based on >>>> the original sf.net bug report with a SQL query >>>> string being constructed in a string: >>>> >>>>> $ cat ttt.pm >>>>> use PDL::NiceSlice; >>>>> >>>>> $table = 'ZEB21'; >>>>> $yr = 1991; >>>>> $schema = 'schema'; >>>>> >>>>> >>>>> print qq{ >>>>> CREATE TABLE $table ( >>>>> CHECK ( yr = $yr ) >>>>> ) INHERITS ($schema.master_table) >>>>> } . "\n"; >>>>> >>>> >>>> >>>> This is the output from the original PDL::NiceSlice >>>> filter engine: >>>> >>>>> $ perl -Mblib ttt.pm >>>>> >>>>> CREATE TABLE ZEB21 ->nslice(CHECK(yr=1991)) INHERITS >>>>> (schema.master_table) >>>>> >>>> >>>> >>>> Here is the result from the Filter::Simple engine: >>>> >>>>> $ PDL_NICESLICE_ENGINE='Filter::Simple' perl -Mblib ttt.pm >>>>> >>>>> CREATE TABLE ZEB21 ( >>>>> CHECK ( yr = 1991 ) >>>>> ) INHERITS (schema.master_table) >>>>> >>>> >>>> >>>> Enjoy! >>>> Chris >>>> >>>> _______________________________________________ >>>> Perldl mailing list >>>> [email protected] >>>> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl >>>> >>> >>> >>> >>> ----- >>> No virus found in this message. >>> Checked by AVG - www.avg.com >>> Version: 10.0.1410 / Virus Database: 1522/3943 - Release Date: 10/07/11 >>> >>> >>> >> >> > _______________________________________________ Perldl mailing list [email protected] http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
