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

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
  • Comment on Re^6: Wassercrats::Improved Volume 0, Number 0

Replies are listed 'Best First'.
Re^7: Wassercrats::Improved Volume 0, Number 0
by diotalevi (Canon) on Aug 26, 2004 at 22:07 UTC

    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
        Functions are no longer really global if you put them into packages, then you have a heirarchy of namespaces for them to occupy.

        How is that different than a variable that lives in a package? Isn't it also part of a heirarchy of namespaces?