Ben Siders wrote: > > Ben Siders wrote: > > > > Ok, this is the strangest thing. I've been staring at it for an hour, > > and it has to be something monumentally stupid. > > > > I have a function that is given a hash reference and it then just > > looks up one of its elements in an anonymous hash that points to other > > functions. Here's the function (I removed the part where it calls > > another function - this is just demonstrating the strange behavior): > > > > my $db_table = { > > codeline => \&write_codeline, > > compounddef => \&write_compound, > > includes => \&write_includerelation, > > initializer => \&write_initializer, > > innerclass => \&write_innerclass, > > param => \&write_param, > > type => \&write_type, > > }; > > > > sub writeToDatabase > > { > > my $this = shift; > > print "[$this->{hashRef}->{tag}] \n"; > > return unless ( exists $db_table->{$this->{hashRef}->{tag}} ); > > print "We didn't return.\n"; > > } > > > > Pretty straightforward? Here's a sample run of the program: > > > > [location] > > [includes] > > [compounddef] > > [includes] > > [includes] > > [includes] > > [includes] > > [includes] > > [includes] > > > > Notice that 'includes' and 'compounddef' are in that $db_table > > reference? And they're clearly in the $this hash. So why isn't it > > finding them in my $db_table hash? > > OK apparantly I have a scoping problem below. If I add this line: > > print "ok\n" if exists $db_table->{codeline}; > > inside my function, I get nothing. If I put it right after the db_table > declaration, it prints. So... are 'my' variables outside of a function > not visible inside it?
Lexical scope flows from the declaration to the end of the block or file so if $db_table is declared below sub writeToDatabase then the sub won't see it. John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]