*Slightly* better to do $compile->{source} = '<p>Hello world <% 1+1 %>.</p><& /footer.mi &>'; $compile->parse(); my $source = $compile->_output_methods() . '; main();';
– at least it avoids the regex…. Allan On 8 January 2013 22:10, Allan Engelhardt <all...@cybaea.com> wrote: > It is a total hack, of course, but for the common case something like the > following appears to do the job. Caching and error handling (and much more) > is left for the reader, but it should be easy enough to implement the bare > bones in the standard Mason distribution (hint, hint) > > <%init> > my $compile = CYBAEA::Mason::Compilation->new( # substitute your project > name > interp => $m->interp(), > path => $m->req()->path(), # probably not quite right…? > source_file => '/dev/null', # Trick - will need adjustment on msdos > and others > ); > ## Assuming you have a /footer.mi component, of course…: > $compile->{source} = '<p>Hello world <% 1+1 %>.</p><& /footer.mi &>'; > my $source = $compile->compile(); > ## If you understand how Mason works, you can probably create the whole > ## package, but I don’t and I coudn’t figure it out. Just grab the main > method. > $source =~ s[\A .* method \s+ main \s* { (.*?) return \s* \; \s* }][$1]xms; > </%init> > > <h1>Hi</h1> > % eval($source); # Nasty, nasty hack. > > > > Improvements would be most welcome! > > Allan > > On 8 January 2013 17:27, Jonathan Swartz <swa...@pobox.com> wrote: > >> I haven't thought about how to do on-the-fly component compilation in >> Mason 2 yet. It made the code a lot cleaner not to have to plan for it, and >> I wasn't sure if anyone would need it. :) >> >> It should be possible since Class::MOP and Moose have utilities for >> creating classes on the fly. Let me know if you come up with a good >> solution. >> >> Jon >> >> On Jan 7, 2013, at 10:47 PM, Allan Engelhardt <all...@cybaea.com> wrote: >> >> Thanks Rolf, but I am trying to use Mason2. Anyone know of a solution >> there? >> >> Allan >> >> On 7 January 2013 23:23, Rolf Schaufelberger <r...@plusw.de> wrote: >> >>> Yes, >>> >>> Am 07.01.2013 um 22:55 schrieb Allan Engelhardt <all...@cybaea.com>: >>> >>> Suppose I have a string (from a database or whatever) that I want to >>> compile, run, and insert into the current component - is that possible? >>> Something like (not tested): >>> >>> % # test.mc >>> <%init> >>> my $s = q{<p>I know 1+1=<% 1+1 %>.</p>}; # From external source >>> </%init> >>> <p>I know many facts</p> >>> <% $m->magic( $s ) %> >>> >>> for some function magic( ... ) which should probably be called >>> scomp_from_string or somesuch.... >>> >>> >>> for HTML::Mason >>> see the docs for HTML::Mason::Interp::make_component >>> >>> # Make an anonymous component >>> my $anon_comp = >>> eval { $interp->make_component >>> ( comp_source => '<%perl>my $name = "World";</%perl>Hello >>> <% $name %>!' ) }; >>> die $@ if $@; >>> >>> $m->comp($anon_comp); >>> >>> >>> >>> Allan >>> >>> >>> Mit freundlichen Grüßen >>> Rolf Schaufelberger >>> >> >> >> ------------------------------------------------------------------------------ >> Master SQL Server Development, Administration, T-SQL, SSAS, SSIS, SSRS >> and more. Get SQL Server skills now (including 2012) with LearnDevNow - >> 200+ hours of step-by-step video tutorials by Microsoft MVPs and experts. >> SALE $99.99 this month only - learn more at: >> >> http://p.sf.net/sfu/learnmore_122512_______________________________________________ >> Mason-users mailing list >> Mason-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/mason-users >> >> >> >
------------------------------------------------------------------------------ Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery and much more. Keep your Java skills current with LearnJavaNow - 200+ hours of step-by-step video tutorials by Java experts. SALE $49.99 this month only -- learn more at: http://p.sf.net/sfu/learnmore_122612
_______________________________________________ Mason-users mailing list Mason-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mason-users