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/
| [reply] [Watch: Dir/Any] [d/l] |
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 | [reply] [Watch: Dir/Any] [d/l] [select] |
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.)
| [reply] [Watch: Dir/Any] |
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) | [reply] [Watch: Dir/Any] |
$ 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 | [reply] [Watch: Dir/Any] [d/l] [select] |
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.
| [reply] [Watch: Dir/Any] |