[html-formfu] Re: Patch: Catalyst::Controller::HTML::FormFu,
Modification of a read-only value attempted at line 178
Ronald J Kimball
rkimball+formfu at pangeamedia.com
Wed Jan 13 14:59:28 GMT 2010
Oskari 'Okko' Ojala wrote:
> Anyone had a look in this patch?
>
> On Mon, 4 Jan 2010, Oskari 'Okko' Ojala wrote:
>
>> The attached patch is against r1657 of
>> http://html-formfu.googlecode.com/svn/trunk/Catalyst-Controller-HTML-FormFu/lib/Catalyst/Controller/HTML/FormFu.pm
>>
>>
>> to fix fatal error message
>>
>> "Modification of a read-only value attempted at
>> ..../perl5/lib/perl5/Catalyst/Controller/HTML/FormFu.pm line 178."
>>
>>
>> Unfortunately I don't know what is the exact chain that causes a
>> read-only value to arrive there, but I'm using the most recent FormFu
>> inside Catalyst. If you eval
>>
>> for ("foo") { s/foo/bar/; print }
>>
>> you can probably see a simplified case of what happens there without
>> the patch. I hope you accept the patch without a list of detailed
>> steps to reproduce the bug. ;-)
>
The plain_value callback passed to config_callback is /supposed/ to
modify $_ in place. Observe that the existing code does not return the
modified string from the callback:
if ( $config->{config_callback} ) {
$form->config_callback( {
plain_value => sub {
return if !defined $_;
s{__uri_for\((.+?)\)__}
{ $self->{c}->uri_for( split( '\s*,\s*', $1 ) ) }eg;
s{__path_to\(\s*(.+?)\s*\)__}
{ $self->{c}->path_to( split( '\s*,\s*', $1 ) ) }eg;
s{__config\((.+?)\)__}
{ $self->{c}->config->{$1} }eg;
}
} );
weaken( $self->{c} )
if !isweak( $self->{c} );
}
So, although your proposed patch would avoid the fatal error you're
encountering, unfortunately it would completely break this feature.
I'm afraid you will need to figure out how a read-only value is getting
passed into this subroutine. If you can provide any more details, that
would be helpful.
Ronald
More information about the HTML-FormFu
mailing list