On Thursday 13 April 2006 09:19, [EMAIL PROTECTED] wrote:
> #!/usr/local/bin/perl
>
> write_function1("first");
> print auto_function(), "\n";
> # This will print:
> # auto_function first
>
> write_function1("second");
> # How would I undefine the autoloaded version of auto_function?
> print auto_function(), "\n";
> # This will print:
> # auto_function first
> # But I would like it to print
> # auto_function second
>
>
>
>
> sub AUTOLOAD {
> my $attr = $AUTOLOAD;
> $attr =~ s/.*:://;
> if ( -e $attr ) {
> require $attr;
What you are trying to do here will not work, have a look at perldoc -q
require.
> } else {
> die "oops";
> }
> warn $@ if $@;
> $attr->("z") if -e $attr;
> }
>
> sub write_function1 {
> my $thing = shift;
> unlink "auto_function";
> open "FILE", ">", "auto_function";
> print FILE <<END;
> sub auto_function{
> " auto_function $thing";
> }
> 1;
> END
> close FILE;
> }
How about trying this instead
#!/usr/bin/perl
use warnings;
use strict;
*auto_function = write_function1('first');
print auto_function(), "\n";
# This will print:
# auto_function first
{
#PERL complains when you redefine subroutines.
#Since you know what your doing disable it for now
no warnings 'redefine';
*auto_function = write_function1('second');
}
print auto_function(), "\n";
# This will print:
# auto_function second
sub write_function1
{
my $thing = shift;
return sub {"auto_function $thing";};
}
Hope this helps
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>