On Oct 6, Kevin Pfeiffer said: >I have several types of user input values I am storing in %history, similar >to the way the shell maintains a history of previous command line commands. >These are only used by a sub-routine, but they need to remain valid for the >life of the program. I see no reason for them to be global, but if they >live in a subroutine, they will be initialized each time. > >My current solution is to place the %history variable and its sub-routine >inside a block.
There's nothing wrong with that. { my $count; sub add { ++$count } sub count { $count } } Now add() and count() have access to the lexical $count, but nothing else does. >A second (related?) problem. I have a variable $READ_ONLY that is needed by >some routines. Right now this is also a global value which has a default >value, but then is modified by one sub-routine. I see no reason for this to >be global, either. > >I'm thinking that it would be better to set up a sub-routine called >"file_mode" and use it like an OO-method getter/setter. You call it with a >value (file_mode("r") and it sets this value. You call it without any >parameters and it returns the current value. Have it return the old value regardless, like select() does. { my $mode = 'r'; sub file_mode { my $old = $mode; $mode = shift if @_; return $old; } sub thingy { if ($mode eq 'r') { ... } else { ... } } } -- Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/ RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/ <stu> what does y/// stand for? <tenderpuss> why, yansliterate of course. [ I'm looking for programming work. If you like my work, let me know. ] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]