2007/8/24, Sundeep <[EMAIL PROTECTED]>: > I need to have a package level variable. For that I am using the > following method: > > package XYZ; > > $XYZ::db_initialised = 0; > > sub init_db() { > DB::init() unless $XYZ::db_initialized; > $XYZ::db_initialized = 1; > } > > or > > package XYZ; > > my $db_initialised = 0; > > sub init_db() { > DB::init() unless $db_initialized; > $db_initialized = 1; > } > > Method 1 works fine and the database is initialized only once > (DB::init() is other module used by me for all db ops) > > Method 2 fails and tries to initialize database again... > I can't use method 1 as per company standards... and I can't > understand the reason why method 2 is failing... >
I'm not sure why you said it try to initialize database again (each time?). But in method2 you made a closure,when calling method2 from out of package XYZ,the value of $db_initialized would be kept,and looks like it's a real package variable. see this test, $ cat XYZ.pm package XYZ; my $db_initialised = 0; sub init_db() { $db_initialized ++; print $db_initialized,"\n"; } 1; $ cat xyz.pl use strict; use XYZ; XYZ::init_db; XYZ::init_db; XYZ::init_db; $ perl xyz.pl 1 2 3 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/