*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

Reply via email to