Well ... the way you've coded things, TT::s1() calls TT::s2(). If you don't want TT::s2() to be called then you need to either:
a) not call TT::s1(), or;
b) rewrite TT::s1() in such a way that it accommodates the possible existence of main::s2() - for example (in TT.pm):
sub s1 {
print "s1";
if(defined(&main::s2)) {main::s2()}
else {s2()}
}
See perldoc -f defined
Cheers,
Rob