Hrm, I usualy pass my DBI handles around without globals. I could see making the handle a "global" part of a class, like Class::DBI does.
I guess making a complex object a global (or just widely-scoped) isn't as bad as a simple string or number. You at least have finer-grained control of what is going on that way. I'd still prefer to pass it around, though.
"There is no shame in being self-taught, only in not trying to learn in the first place." -- Atrus, Myst: The Book of D'ni.
| [reply] |
Thats what Singletons and Factory classes are for, they are global without actually being global. Of if you are of the more functional persuasion you can use an Identity function. But there is always some way to avoid using globals.
| [reply] |
Yes... I've used singleton producing functions before but what's the point in that? If I say that DB->handle() returns the DBI handle or put the thing in $DB::handle, how does that differ? Consider that your function itself is a global of a kind. It is nameable by any code elsewhere in the running program just as your variable slot was. Anyhow, Factories are for Java programmers. That's what our untyped variables are for in perl and that's an entirely different discussion.
| [reply] |
If I say that DB->handle() returns the DBI handle or put the thing in $DB::handle, how does that differ?
It is the same logic that is behind calling accessor and mutator methods on objects, it hides the underlying representation. This is not even really an OO concept either, it goes back to the days of structured programming and abstract data types even. If I call DB->handle() rather than access $DB::handle directly, then I can change my DB package from managing a single connection, to manage a pool of connections. Or I can verify that my connection is active before handing it to the calling function, and reconnect if it is not.
Consider that your function itself is a global of a kind.
Functions are no longer really global if you put them into packages, then you have a heirarchy of namespaces for them to occupy.
| [reply] [d/l] [select] |