Why?

First you print the scalar translation of the symbol (*main::x)
Then you printed the array (1 2 3 4)
Then you printed a non-existent hash (0)

On 17/04/2011 17:29, Ronen Angluster wrote:
> actually:
>
> *@x=(1,2,3,4);*
> *$z=*x;*
> *print "$z\n";*
> *print "@$z\n";*
> *print %$z."\n";*
>
> produced:
>
> **main::x*
> *1 2 3 4*
> *0*
>
> which now baffles me even more :)
>
> On Sun, Apr 17, 2011 at 5:06 PM, Issac Goldstand <[email protected]
> <mailto:[email protected]>> wrote:
>
>     I'm not sure, I understand.
>
>     Let's take your example one step further and say we had values for
>     @x and %x
>
>     Given the same code, if you tried to get @$y and %$y, you
>     (probably) wouldn't get anything useful.
>
>     But if you tried to get @$z or %$z, you should get back @x and %x
>
>       Yitzchak
>
>
>
>     On 17/04/2011 17:02, Ronen Angluster wrote:
>>     a bit, 
>>     if i got this right, $z=*x is assigning the singleton(of sorts)
>>     of "main::x" into $z?
>>
>>     On Sun, Apr 17, 2011 at 4:58 PM, Issac Goldstand
>>     <[email protected] <mailto:[email protected]>> wrote:
>>
>>         Hi Ronen!
>>
>>         The former (\$x) is a reference to the scalar value of x
>>         ($x).  The latter is a pointer to the symbol table for all
>>         symbols called "x".
>>
>>         So when you're doing $\$x ($$y) you're asking for the scalar
>>         value of the reference to the scalar 1
>>         When you're doing $*x ($$z) you're asking for the scalar
>>         entry in the symbol table for symbol x (also 1).
>>
>>         Does that clear things up for you?
>>
>>           Yitzchak
>>
>>
>>         On 17/04/2011 16:52, Ronen Angluster wrote:
>>>         Hi all!
>>>         happy passover!
>>>
>>>         i've been wondering and could not find anyone who could explain
>>>         to me what is the difference between \$var to *var...
>>>         consider the following:
>>>         *$x=1;*
>>>         *$z=\$x;*
>>>         *$y=*x;*
>>>         *print "$y\n$z\n";*
>>>         would print:
>>>         **main::x*
>>>         *SCALAR(0x1951ac8)*
>>>
>>>         but if we:*print "$$y\n$$z\n";*
>>>         the output would be:
>>>         *1*
>>>         *1*
>>>
>>>         so, why use 1 against the other? what does it mean that the
>>>         pointer is to the class and 
>>>         not to the memory space of the variable?
>>>
>>>
>>>         Ronen
>>>
>>>
>>>         _______________________________________________
>>>         Perl mailing list
>>>         [email protected] <mailto:[email protected]>
>>>         http://mail.perl.org.il/mailman/listinfo/perl
>>
>>
>>         _______________________________________________
>>         Perl mailing list
>>         [email protected] <mailto:[email protected]>
>>         http://mail.perl.org.il/mailman/listinfo/perl
>>
>>
>>
>>     _______________________________________________
>>     Perl mailing list
>>     [email protected] <mailto:[email protected]>
>>     http://mail.perl.org.il/mailman/listinfo/perl
>
>
>     _______________________________________________
>     Perl mailing list
>     [email protected] <mailto:[email protected]>
>     http://mail.perl.org.il/mailman/listinfo/perl
>
>
>
> _______________________________________________
> Perl mailing list
> [email protected]
> http://mail.perl.org.il/mailman/listinfo/perl

_______________________________________________
Perl mailing list
[email protected]
http://mail.perl.org.il/mailman/listinfo/perl

Reply via email to