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 >