How about eval?
# "inline subroutine" my $inlined = <<'END'; my $expt_len; ## START Inline # Inlined the ->expected_length method call here. if ( exists $self->{'expected_length'} ) { $expt_len = $self->{'expected_length'}; } else { if( ${$self->{'header_text'}} =~ /L=(?>[^;]+);/ ) { $expt_len = substr ( ${$self->{'header_text'}}, $-[0] + 2, $+[0] - $-[0] - 3 ); } else { $expt_len = undef; } } ## END Inline END # sub declaration eval <<'END' sub body { my $self = shift; if ( exists $self->{'uncompressed'} ) { return $self->{'uncompressed'}; } unless ( exists $self->{'compressed'} ) { confess "Record missing body!"; } END .$inlined. <<'END'; $self->{'uncompressed'} = $self->{'uncompress_function'}( $self->{'compressed'}, $expt_len ); my $retr_len = length ${$self->{'uncompressed'}}; unless ( $expt_len == $retr_len ) { confess "Uncompressed record length $retr_len did not match expect +ed " . "length $expt_len for record $self->{record_number}."; } return $self->{'uncompressed'}; } END ;
In reply to Re: Inlining method/function calls?
by fglock
in thread Inlining method/function calls?
by diotalevi
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |