=begin pod =TITLE Glossary of Perl 6 terminology =head1 Anonymous A subroutine, method or submethod is called I if it can't be called by name. # named subroutine sub double($x) { 2 * $x }; # anonymous subroutine, stored in a named scalar my $double = sub ($x) { 2 * $x }; Note that it is still allowed to have a name # anonymous, but knows its own name my $s = anon sub triple($x) { 3 * $x } say $s.name; # triple =head1 Autothreading Autothreading is what happens if you pass a junction to a sub that expects a parameter of type C or a subtype thereof. The call is executed multiple times, each time with a different eigenstate of the junction. The result of these calls is assembled in a junction of the same type as the original junction. sub f($x) { 2 * $x }; if f(1|2|3) == 4 { say 'success'; } Here C is a sub with one parameter, and since it has no explicit type, it is implicitly typed as C. The C argument causes the C call to be internally executed as C, and the resulting junction is C<2|4|6>. This process of separating Junction arguments into multiple calls to a function is called I. =head1 Instance An I of a class is also called an I in some other programming languages. It has a storage for attributes, and is often the return value of a call to a method called C, or a literal. Instances of most types are defined to be C i.e., C is C. my Str $str = "hello"; ## this is with builtin types, e.g. Str if defined($str) { say "Oh, yeah. I'm defined."; } else { say "No. Something off? "; } ## if you wanted objects... class A { # nothing here for now. } my $an_instance = A.new; say $an_instance.defined.perl;# defined($an_instance) works too. Or to put it another way, a class has all the blueprint of methods and attributes, and an instance carries it forward into the real world. =head1 Invocant The object on which a method is called is called the I in Perl 6. It is what C refers to in a method. say 'str'.uc; # 'str' is the invocant of method uc =head1 Literal A I is a piece of code that directly stands for a (often built-in) object, and also refers to the object itself. my $x = 2; # the 2 is a literal say $x; # $x is not a literal, but a variable =head1 lvalue An I or a I is anything that can appear on the left hand side of the assignment operator C<=>; anything you can assign to. Typical lvalues are variables, private and C attributes, lists of variables and lvalue subroutines. Examples of lvalues: Declaration lvalue Comments my $x; $x my ($a, $b); ($a, $b) has $!attribute; $!attribute Only inside classes has $.attrib is rw; $.attrib sub a is rw { $x }; a() Examples of things that are not lvalues 3 # literals constant x = 3; # constants has $.attrib; # attributes; you can only assign to $!attrib sub f { }; f(); # "normal" subs are not writable sub f($x) { $x = 3 }; # error - parameters are read-only by default =head1 Mainline The C is the program text that is not part of any kind of block. use v6; # mainline sub f { # not in mainline, in sub f } f(); # in mainline again =head1 Slurpy A parameter of a sub or method is said to be I if it can consume an arbitrary number of arguments. It is indicated by an asterisk C<*> in front of the parameter name. sub sum (*@numbers) { return [+] @numbers; } =head1 Type Object A I is an object representing a class, role, package, grammar or enum. It is generally accessible with the same name as the type. class A { }; say A; # A is the type object my $x = A.new(); # same here my $x = class { method greet() { say "hi"; } } # $x now holds a type object returned from the # anonymous class definition =end pod