--- Jon Cassorla <[EMAIL PROTECTED]> wrote: > > There are many ways to do this. Here is just one example using a > closure. > > package Remember; > > # this is a closure > { > my $savedData = 0; # only accessible within this scope; side > effect is that > # it stays around as long as the module since > the following > # method needs it > > sub rememberData > { > my $class = shift; > $savedData = shift if @_; # update with new value if given > return $savedData; # return current value > } > } > > 1; > > > Here is a test program to validate that the data in $savedData stays > around.
Actually, you really don't want to try to lexically scope a subroutine like that (because you can't -- well, there is a way, but it involves messing with symbol tables and that's usually not a good idea). Your code can easily result in mysterious "Variable $foo will not stay shared" errors. Here's a sample program to show why this is bad practice (even though it looks good): #!/usr/bin/perl -w use strict; first( "Ovid" ); second(); first( "foo" ); sub first { my $argument = shift; second(); sub second { print "$argument\n"; } } That will print "Ovid" three times and warn you that the variable $argument will not stay shared. Cheers, Curtis "Ovid" Poe ===== Senior Programmer Onsite! Technology (http://www.onsitetech.com/) "Ovid" on http://www.perlmonks.org/ __________________________________________________ Do You Yahoo!? Make a great connection at Yahoo! Personals. http://personals.yahoo.com -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]