$ perl -Mstrict -Mwarnings -le '
package myDebugger;
my $debugger;
sub GetInstance { defined $debugger ? $debugger : DebuggerInit() }
sub DebuggerInit { $debugger = "singleton" }
# a typo later in your code (perhaps "$debug = 0;" was intended)
my $debug = 1;
# ...
$debugger = 0;
package main;
print myDebugger::GetInstance();
print myDebugger::GetInstance();
'
0
0
####
$ perl -Mstrict -Mwarnings -le '
package myDebugger;
{
my $debugger;
sub GetInstance { defined $debugger ? $debugger : DebuggerInit() }
sub DebuggerInit { $debugger = "singleton" }
}
# a typo later in your code (perhaps "$debug = 0;" was intended)
my $debug = 1;
# ...
$debugger = 0;
package main;
print myDebugger::GetInstance();
print myDebugger::GetInstance();
'
Global symbol "$debugger" requires explicit package name at -e line 11.
Execution of -e aborted due to compilation errors.
####
$ perl -Mstrict -Mwarnings -le '
package myDebugger;
{
my $debugger;
sub GetInstance { defined $debugger ? $debugger : DebuggerInit() }
sub DebuggerInit { $debugger = "singleton" }
}
# a typo later in your code (perhaps "$debug = 0;" was intended)
my $debug = 1;
# ...
$debug = 0;
package main;
print myDebugger::GetInstance();
print myDebugger::GetInstance();
'
singleton
singleton