I thought:
$ is Scalar
@ is Array
% is Hash
& is a function

> my $x; say $x.VAR.WHAT;
(Scalar)

A dollar variable is a scalar.  The Scalar type is the the container for
the dollar-variables, just like Array is the container for @array and Hash
is the container for %hash.  Of course we also have this...
> my &x; &x.VAR.WHAT
(Scalar)

It turns out functions are stored in Scalar containers as well.  In my view
it's a form of syntactic sugar to be able to to use function names without
a sigil in Perl 6.  A declared function is just an object; `sub foo {}` is
saved in the current lexical scope as &foo.  These function calls are all
equivalent:
> my &x = sub { say "called" };
sub () { #`(Sub|140204743370112) ... }
> x()
called
> &x()
called
> my $y = &x; $y();
called

(Though multi subs would be much more complex to declare this way.)


On Fri, Jun 9, 2017 at 9:51 PM, Gabor Szabo <szab...@gmail.com> wrote:

> Brad, thanks for your reply.
> I accept your point on not calling $-variables "generic variables",
> but then how do you call them?
>
> The same with the other 3. You described what they do in the same way
> as the documentation does, but
> when you casually speak about them, you know, with friends in bar :-),
>  what do you call them then? e.g.:
>
> @a = 23, 14, 49;
>
> Do you say:
> "I assign the list on the right hand side to a variable that does the
> Positional role."    ?
> or
> "I assign the list on the right hand side to an array."     ?
> or
> "I assign the list on the right hand side to an at-variable."     ?
> or
> Something completely different.
>
> Gabor
>
>
>
> On Sat, Jun 10, 2017 at 7:21 AM, Brad Gilbert <b2gi...@gmail.com> wrote:
> > @ does the Positional role
> > % does Associative
> > & does Callable
> > $ causes its value to be an item (its values do not flatten into an
> > outer list when you use `flat`)
> >
> >     my %hash is SetHash;
> >
> > Array does Positional, and all of its values are itemized
> >
> > We are unlikely to call $ variables "generic" because the word
> > "generic" is too generic.
> > For example Java has generics, and they are not variables.
> > Why muddy the waters by using a word that has many different meanings
> > in different programming languages?
> >
> > On Fri, Jun 9, 2017 at 1:21 AM, Richard Hainsworth
> > <rnhainswo...@gmail.com> wrote:
> >> It also seems to me that 'scalar' gives the wrong impression compared to
> >> arrays. A scalar in a vector is a component of a vector.
> >>
> >> I was thinking of "generic".
> >>
> >> Hence "$variable" is a generic variable because it can hold any type of
> >> content.
> >>
> >>
> >>
> >> On Friday, June 09, 2017 02:10 PM, Gabor Szabo wrote:
> >>>
> >>> Looking at https://docs.perl6.org/language/variables there are 4
> >>> variable types with sigil:  $, @, %, &.
> >>> In Perl 5 I used to call them scalar, array, hash, and function
> >>> respectively, even if the scalar variable had a reference to an array
> >>> in it.
> >>>
> >>> How do you call them in Perl 6?
> >>>
> >>> As I understand @ always holds an array (@.^name is always Array or
> >>> some Array[type]). Similarly % always holds a hash and & is always a
> >>> function or a method.
> >>> So calling them array, hash, and function sounds good.
> >>>
> >>> However I am not sure what to call the variables with a $ sigil?
> >>> Should they be called "scalars"? Wouldn't that case confusion as there
> >>> is also a container-type called Scalar.
> >>>
> >>> The word "scalar" appears twice in the document describing the
> >>> variables: https://docs.perl6.org/language/variables and a total of
> >>> 135 in the whole doc including the 5to6 documents and the document
> >>> describing the Scalar type.
> >>> The document describing the Scalar type:
> >>> https://docs.perl6.org/type/Scalar the term "$-sigiled variable" is
> >>> used which seems to be a bit long for general use.
> >>>
> >>> So I wonder how do *you* call them?
> >>>
> >>> Gabor
>

Reply via email to