Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: Why was it neccessary to pass a DBI handler by reference?

by Abigail-II (Bishop)
on Jan 28, 2004 at 16:12 UTC ( [id://324698]=note: print w/replies, xml ) Need Help??


in reply to Re: Why was it neccessary to pass a DBI handler by reference?
in thread Why was it neccessary to pass a DBI handler by reference?

That doesn't make any sense to me. \$dhb is also a scalar value, and a database handler is already a reference.

Abigail

Replies are listed 'Best First'.
Re: Re: Why was it neccessary to pass a DBI handler by reference?
by neuroball (Pilgrim) on Jan 28, 2004 at 16:30 UTC

    Hm... following the logic of the above (if I am not mistaken): I am (a) wrong, and (b) kudra needed to have a reference to a reference???

    Not to be a pain in your neck, but could you explain a bit more what you meant? For example, take the following code:

    #!/usr/local/bin/perl use warnings; use diagnostics; use strict; my $x = "Just another scalar"; my $y = \$x; print $x."\n"; print $y."\n";

    Am i totally of base with this??? Or am I missing something very basic?

    /oliver/

      kudra needed to have a reference to a reference???
      Maybe, maybe not. I can't make heads nor tails from kudra's posting. Some vital information, namely the code in the modules One and Two is missing. I'm not going to speculate what's going on.
      For example, take the following code:
      Your code produces:
      Just another scalar SCALAR(0x8191618)
      But what about it? Why do you post that code. Does the result surprise you? Are you trying to make a point?
      but could you explain a bit more what you meant?
      What I meant was every reference is a scalar. There are no exceptions to this rule. What I also meant was that the $dbh in kudra's original post is also very likely to be a reference. Your post seem to imply that you think scalars and references are different things. So, I have two points: 1) references are scalars. 2) in both forms, a reference is passed as second argument to the news anyway.

      Abigail

      Or am I missing something very basic?

      I think you might be conflating a stringified scalar reference with scalars in general. Scalars in Perl are single-value entities. A string is stored as a scalar. A reference is stored as a scalar. These bear no inherent relation to eachother, though. One can have [among other things] (1) a plain string, or (2) a reference to a string, or (3) a reference to something else. All of these are scalars. Only (2) would necessarily print "SCALAR(...)" when stringified, though -- that is a reference thing, not a scalar thing. (I say 'necessarily' because while (3) might print "SCALAR(...)", it could also print "ARRAY(...)", "HASH(...)", or any number of other things, depending on what it's a reference to.)

Re: Re: Why was it neccessary to pass a DBI handler by reference?
by MCS (Monk) on Jan 29, 2004 at 22:26 UTC
    As far as I remember, \$dbh is not a scalar. It is a reference, not a scalar. If you print a reference, it doesn't know what to do so it prints out the address value, it doesn't mean it is a scalar. (Of course I may be wrong but I'm pretty sure I am not)
      Considering that arrays and hashes can only contain scalars, how do you construct multi-dimensional datastructures?

      The first paragraph of the description section of 'man perlref' says Any scalar may hold a hard reference. (Hard reference is used here to indicate it's not a soft- or symbolic reference). If references aren't scalars, what does that sentence mean?

      $ perl -MDevel::Peek -wle 'my $dbh = "foo"; Dump \$dbh' SV = RV(0x8194068) at 0x817cca0 REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x817cd54 SV = PV(0x817cf90) at 0x817cd54 REFCNT = 2 FLAGS = (PADBUSY,PADMY,POK,pPOK) PV = 0x818f688 "foo"\0 CUR = 3 LEN = 4
      Devel::Peek thinks that \$dbh is an SV, which stands for scalar value.

      So, what is it that makes you think that references aren't scalars? Do you have documentation quotes, code fragments, or pointers to the source that back up your claim?

      Abigail

        Sorry, my understanding was incorrect. The way I (incorrectly) understood it was that $y was a scalar representation of the reference \$x. (In the example: "my $y = \$x;") I then thought that when you dereferenced it, it converted it back into a reference.

        Of course, I guess this is sortof how it works, in that \$x must figure out the address of x and return it so in a way it almost acts like a function. So \$x is basically a function with the parameter $x that returns the address of $x. (as a scalar of course) But then again \ isn't really a function, I imagine it interprets whatever follows it at runtime. However, I'm not about to start digging around the perl code to see exactly how it works.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (5)
As of 2024-06-14 13:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuli‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.