Hmm that looks ugly in my email client. Here it is as a gist instead. BTW so everyone can follow, yes, those are nested Heredocs.
https://gist.github.com/2007924 Joel On Fri, Mar 9, 2012 at 12:31 PM, Joel Berger <[email protected]>wrote: > Good call on the eval. I was having a hard time getting the method to show > up correctly from another file. I'm sure its possible, but this was much > easier. The warn message is so that you can see that the compiling only > happens when the conditional is true. > > #!/usr/bin/env perl > > use strict; > use warnings; > > use PDL; > > my $cond = shift || 0; > my $pdl = null(); > > # sometime later > if ($cond) > { > eval <<'ON_DEMAND_ONLY'; > warn "Compiling"; > use Inline Pdlpp => << 'PDLPP'; > pp_def('say_hi', > 'Pars' => 'a(n)', > 'Code' => q{ printf("%s\n", "Hello, world!"); } > ); > PDLPP > ON_DEMAND_ONLY > $pdl->say_hi(); > } > > > On Fri, Mar 9, 2012 at 12:25 PM, Craig DeForest <[email protected] > > wrote: > >> Yes. That, or put the whole thing in a non-substituting quote block and >> eval that block at run-time. >> >> >> On Mar 9, 2012, at 11:23 AM, Joel Berger wrote: >> >> IIRC all Inline mechanisms work essentially at compile time. However, if >> you wanted to delay it, you might put your Inline code in another file, >> then `require` that file if needed. I believe this should behave as you >> would like. >> >> # file: MyPP.pm >> use PDL; >> use Inline qw(Pdlpp); >> >> __END__ >> __Pdlpp__ >> pp_def('say_hi', >> 'Pars' => 'a(n)', >> 'Code' => q{ printf("%s\n", "Hello, world!"); } >> ); >> >> # file: myscript.pl >> use PDL; >> >> my $cond = 0; >> my $pdl = null(); >> >> # sometime later >> if ($cond) >> { >> require MyPP; >> $pdl->say_hi(); >> } >> >> Admittedly I haven't tried this code, and I'm not as familiar with >> PDL::PP as I am with XS-y things, but IMO this kind of a mechanism should >> work. >> >> Joel >> >> On Fri, Mar 9, 2012 at 11:47 AM, Tim Haines >> <[email protected]>wrote: >> >>> Greetings, all. >>> >>> I just read through the sections of PDL::Book and PDL::Tutorial that >>> cover PP, but I didn't see an example of conditional compilation of a >>> pp_def. Is this even possible using PP::Inline given the way the __END__ >>> and __Pdlpp__ macros work? Is there a way to do this just using PDL::PP? I >>> am uncertain how to use 'raw' PDL::PP since the examples from PDL::Book and >>> PDL::Tutorial all use PDL::PP::Inline (unless I missed it!). >>> >>> [code] >>> >>> use PDL; >>> use Inline qw(Pdlpp); >>> my $cond = 0; >>> my $pdl = null(); >>> >>> # sometime later >>> if ($cond) >>> { >>> $pdl->say_hi(); >>> } >>> >>> # at the end of the script >>> if ($cond) # Perl generates an error here since it can't see the >>> closing brace >>> { >>> __END__ >>> __Pdlpp__ >>> pp_def('say_hi', >>> 'Pars' => 'a(n)', >>> 'Code' => q{ printf("%s\n", "Hello, world!"); } >>> ); >>> } <--- The Perl parser can't see this brace, and PP generates an error >>> for unclosed brace. >>> >>> [/code] >>> >>> The principle reason I am looking for this functionality is to remove >>> the overhead of generating/compiling/linking the xs definition of say_hi >>> unless the function is actually needed at runtime. >>> >>> Many thanks. >>> >>> - Tim >>> >>> _______________________________________________ >>> 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 >> >> >> >
_______________________________________________ Perldl mailing list [email protected] http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
