in reply to Passing self from class to class?

It looks very much like you intent SomeClass to be a sublcass of SomeOtherClass. Why does it look this way? Because you assume that both classes have $self->{cgi} hold an instance of CGI, you show it being set up in SomeClass, but not in SomeOtherClass.

If you change SomeClass to read

package SomeClass; use base qw(SomeOtherClass); ...
then you can write
sub run { my $self = shift; $self->SomeSub(); }
Doing this does not create a new instance of the CGI module. Methods (subroutines) from both SomeClass and SomeOtherClass both have access to the same instance of CGI.