Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^5: Wassercrats::Improved Volume 0, Number 0

by diotalevi (Canon)
on Aug 26, 2004 at 20:50 UTC ( [id://386168]=note: print w/replies, xml ) Need Help??


in reply to Re^4: Wassercrats::Improved Volume 0, Number 0
in thread Perl::Improved Volume 0, Number 0

The other only accepted use of globals are for such things that are global like database connections or things that cross-cut into potentially every or many contexts.
  • Comment on Re^5: Wassercrats::Improved Volume 0, Number 0

Replies are listed 'Best First'.
Re^6: Wassercrats::Improved Volume 0, Number 0
by hardburn (Abbot) on Aug 26, 2004 at 20:54 UTC

    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.

Re^6: Wassercrats::Improved Volume 0, Number 0
by stvn (Monsignor) on Aug 26, 2004 at 21:55 UTC

    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.

    -stvn

      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.

        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.

        -stvn

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://386168]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2024-04-23 22:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found