kudra has asked for the wisdom of the Perl Monks concerning the following question:
Note: All examples are pseudocode.
I have been working on an application which runs in the fast CGI environment. Much of the functionality has been put in modules. There are a number of variables which need to be shared by the modules in a single program run, but which must be distinct each time the application is run. One of these variables is a DBI handler, which I was passing to the constructors of two different modules:
Module One parses some files, begins a transaction, and calls routines in module Two to insert some data. The commit is done in module One. The handle is disconnected in the destruction of Two.my $one = new One(dbh => $dbh, ...); my $two = new Two(dbh => $dbh, ...);
This did not work. It was almost as if One and Two had different connections, because when I added a commit to Two, the data was committed. Yet I did not get any warnings about the handle in Two being destroyed instead of disconnected. In short, it didn't act like a new handler, nor did it act like an old one.
I tried again to make sure that One and Two got the same handler. I changed the code to:
This worked.my $one = new One(dbh => \$dbh, ...); my $two = new Two(dbh => \$dbh, ...);
My question is: why did I need to explicitly pass this by reference?