SUPPORT THE WORK

GetWiki

Perl 6

ARTICLE SUBJECTS
aesthetics  →
being  →
complexity  →
database  →
enterprise  →
ethics  →
fiction  →
history  →
internet  →
knowledge  →
language  →
licensing  →
linux  →
logic  →
method  →
news  →
perception  →
philosophy  →
policy  →
purpose  →
religion  →
science  →
sociology  →
software  →
truth  →
unix  →
wiki  →
ARTICLE TYPES
essay  →
feed  →
help  →
system  →
wiki  →
ARTICLE ORIGINS
critical  →
discussion  →
forked  →
imported  →
original  →
Perl 6
[ temporary import ]
please note:
- the content below is remote from Wikipedia
- it has been imported raw for GetWiki








factoids
JavaScript, Perl, Ruby (programming language)>Ruby, SmalltalkPerl>Perl 5,HTTP://PUGS.BLOGS.COM/PUGS/2010/04/HOW-TO-IMPLEMENT-PERL-6-IN-10.HTML>TITLE=HOW TO IMPLEMENT PERL 6 IN '10AUTHOR=唐鳳, A.K.A. AUDREY TANG, Haskell, AntLang| platform =| operating system = Cross-platformGNU General Public License or Artistic License > Artistic License 2| file extensions = .p6, .pl6, .pm6, .pod6weblinkperl6.org}}}}Perl 6 (also known as Rakuweblink is a member of the Perl family of programming languages.WEB,weblink About Perl, 2013-04-20, perl.org, "Perl" is a family of languages, "Perl 6" is part of the family, but it is a separate language which has its own development team. Its existence has no significant impact on the continuing development of "Perl 5"., While historically several interpreter and compiler implementations were being written, today only the Rakudo Perl 6 implementation is in active development.It is introducing elements of many modern and historical languages. Compatibility with Perl 5 is not a goal, though a compatibility mode is part of the specification. The design process for Perl 6 began in 2000. In February 2015 a post on The Perl Foundation blog stated that "The Perl6 team will attempt to get a development release of version 1.0 available for Larry's birthday in September and a Version 1.0 release by Christmas",WEB,weblink Perl Foundation, The Perl6 team will attempt to get a development release of version 1.0 available for Larry's birthday in September and a Version 1.0 release by Christmas. So it looks like Christmas 2015 was the Christmas that we were expecting., yes,weblink" title="web.archive.org/web/20051130095932weblink">weblink 2005-11-30, and on 25 December 2015, the first stable version of the specification was announced.WEB, Christmas is here.,weblink Perl 6 Advent Calendar, 2015-12-27, Development on Pugs, the first high-traction implementation, began in 2005, and there have been multiple Perl 6 implementation projects. Rakudo Perl 6 is based on NQP (Not Quite Perl) and can use MoarVM or the Java Virtual Machine as a runtime environment, and releases a new version every month (including precompiled GNU/Linux packagesWEB, Native Linux Rakudo packages,weblink rakudo-pkg, 2016-10-01, ); in July 2010, the project released the first Rakudo Star distribution,WEB
,weblink
, Announce: Rakudo Star â€” a useful, usable, "early adopter" distribution of Perl 6
, Michaud
, Patrick
, 29 July 2010
, 2015-02-08
, a collection of a Perl 6 implementation and related materials. Larry Wall maintains a reference grammar known as STD.pm6, written in Perl 6 and bootstrapped with Perl 5.

History

{{Quotation|text=In Perl 6, we decided it would be better to fix the language than fix the user.|author=Larry WallBOOK, Masterminds of Programming: Conversations with the Creators of Major Programming Languages, Federico Biancuzzi, Shane Warden, 978-0596515171, }}The Perl 6 design process was first announced on 19 July 2000, on the fourth day of that year's Perl Conference,WEB, Report from the Perl Conference,weblink Kline, Joe, 2000-08-21, by Larry Wall in his State of the Onion 2000 talk.WEB, State of the Onion 2000, Wall, Larry, O'Reilly Network,weblink 2000, Larry Wall, At that time, the primary goals were to remove "historical warts" from the language; "easy things should stay easy, hard things should get easier, and impossible things should get hard"; a general cleanup of the internal design and APIs. The process began with a series of requests for comments or "RFCs". This process was open to all contributors, and left no aspect of the language closed to change.WEB, About Perl 6 RFCs, The Perl Foundation,weblink 2000, Once the RFC process was complete, Wall reviewed and classified each request (361 were received). He then began the process of writing several "Apocalypses", a term which means "revealing".WEB,weblink Apocalypse 1: The Ugly, the Bad, and the Good, Wall, Larry, 2001-04-02, While the original goal was to write one Apocalypse for each chapter of Programming Perl, it became obvious that, as each Apocalypse was written, previous Apocalypses were being invalidated by later changes. For this reason, a set of Synopses were published, each one relating the contents of an Apocalypse, but with any subsequent changes reflected in updates. Today, Perl 6 specification continues almost entirely within the Synopses.WEB, Larry Wall and the Perl 6 designers, Perl 6 Design Documents,weblink 2015, There are also a series of Exegeses written by Damian Conway that explain the content of each Apocalypse in terms of practical usage. Each Exegesis consists of code examples along with discussion of the usage and implications of the examples.WEB,weblink Exegeses, The Perl Foundation, 2001, There are three primary methods of communication used in the development of Perl 6 today. The first is the {{Freenode|perl6}} IRC channel on freenode. The second is a set of mailing lists on The Perl Foundation's servers at perl.org.WEB, Perl Development: Mailing Lists, The Perl Foundation,weblink 2002, The third is the Git source code repository hosted atweblink

Goals

The break in compatibility was mandated from the start of the project, and immediately allowed some of the changes that Larry Wall had suggested in his initial speech. "Historical warts" such as the confusion surrounding sigil usage for containers; the ambiguity between the select functions; the syntactic impact of bareword filehandles; and many other problems that Perl programmers had discussed fixing for years were some of the first issues addressed.Over the years, Perl 6 has undergone several alterations in its direction. The introduction of concepts from Python and Ruby were early influences,{{Citation needed|date=May 2009}} but as the Pugs interpreter was written in the Haskell programming language, many functional programming influences were absorbed by the Perl 6 design team.{{Citation needed|date=November 2009}}

Mascot

(File:FOSDEM 2015 Larry Wall and Camelia the Perl6 logo.jpg|thumbnail|Larry Wall and Camelia)The language's mascot is "Camelia, the Perl 6 bug".WEB
,weblink
, Perl creator hints at imminent release of long-awaited Perl 6
, Joab
, Jackson
, IDG News Service
, 23 July 2010
, 2015-02-08
, Her name is a nod to the camel mascot associated with Perl, and her form, in the pun-loving tradition of the Perl community, is a play on "software bug". Spiral designs embedded in her butterfly-like wings resemble the characters "P6", the favored nickname for Perl 6, and off-center eye placement is an intentional pun on "Wall-eyed"WEB
,weblink
, Larry Wall in IRC chat log
, 15 January 2016
, 2017-11-10
, One of the goals behind the lively and colorful design of the logo was to discourage misogyny in the community and for it to be an opportunity for those of "masculine persuasion" to show their sensitive side.WEB
,weblink
, Archived "Logo considerations" email from Larry Wall
, 24 March 2009
, 2017-11-10
,

Implementations

{{As of|2017}}, only the Rakudo Perl 6 implementation is under active development. No implementation will be designated as the official Perl 6 implementation; rather, "Perl 6 is anything that passes the official test suite."Rakudo Perl 6WEB,weblink rakudo/rakudo - GitHub, Github.com, 2013-09-21, WEB,weblink The compiler formerly known as 'perl6', Michaud, Patrick, 2008-01-16, yes,weblink" title="web.archive.org/web/20120218080103weblink">weblink 2012-02-18, targets a number of virtual machines, such as MoarVM, the Java Virtual Machine, and JavaScript. MoarVM is a virtual machine built especially for Rakudo Perl 6WEB, Worthington, Jonathan, MoarVM: A virtual machine for NQP and Rakudo,weblink 6guts, 24 July 2013, and the NQP Compiler Toolchain.WEB,weblink MoarVM, 2017-07-08, MoarVM team, There is a layer between Perl 6 and the virtual machines called Not Quite Perl 6, or NQP, which implements Perl 6 rules for parsing Perl 6, as well as an Abstract syntax tree and backend-specific code generation. Large portions of Rakudo are written in Perl 6 itself, or in its subset NQP. Rakudo is not a completely self-hosting implementation, nor are there concrete plans at this point to make Rakudo a bootstrapping compiler.

Historical implementations

Pugs was an initial implementation of Perl 6 written in Haskell. Pugs used to be the most advanced implementation of Perl 6, but since mid 2007 it is mostly dormant (with updates made only to track the current version of GHC). As of November 2014 Pugs was not being actively maintained.WEB,weblink Feature comparison of Perl 6 compilers, In 2007, v6-MiniPerl6 ("mp6") and its reimplementation, v6-KindaPerl6 ("kp6") were written as a means to bootstrap the Perl-6.0.0 STD, using Perl 5. The STD is a full grammar for Perl 6 and is written in Perl 6. In theory, anything capable of parsing the STD and generating executable code is a suitable bootstrapping system for Perl 6. kp6 is currently compiled by mp6 and can work with multiple backends.WEB,weblink Perl 6 STD, Wall, Larry, 2007, etal, WEB,weblink mp6/kp6 FAQ, 2006, Perl 6 development team, mp6 and kp6 are not full Perl 6 implementations and are designed only to implement the minimum featureset required to bootstrap a full Perl 6 compiler.Yapsi is a Perl 6 compiler and runtime written in Perl 6 itself. As a result, it requires an existing Perl 6 interpreter, such as one of the Rakudo Star releases, in order to run.WEB,weblink Yapsi README, 2011, Niecza, another major Perl 6 implementation effort, focused on optimization and efficient implementation research. It targets the Common Language Infrastructure.WEB
,weblink
, Niecza README.pod
, O'Rear
, Stefan
, 29 November 2011
, 2012-01-12
,

Module system

The Perl 6 specification requests that modules be identified by name, version, and authority.WEB,weblink Synopsis 11: Modules, Wall, Larry, 2004, It is possible to load only a specific version of a module, or even two modules of the same name that differ in version or authority. As a convenience, aliasing to a short name is provided.CPAN, the Perl 5 module distribution system, does not yet handle Perl 6 modules. Instead a prototype module system is in use.WEB,weblink Perl 6 Modules Directory, Modules.perl6.org, 2013-09-21,

Major changes from Perl 5

Perl 5 and Perl 6 differ fundamentally, though in general the intent has been to "keep Perl 6 Perl", so that Perl 6 is clearly "a perl programming language". Most of the changes are intended to normalize the language, to make it easier for novice and expert programmers alike to understand, and to make "easy things easier and hard things more possible".

A specification

A major, but non-technical difference between Perl 5 and Perl 6 is that Perl 6 began as a specification.WEB,weblink Synopsis 1: Overview, Wall, Larry, 2004-08-10, This means that Perl 6 can be re-implemented if needed, and it also means that programmers don't have to read the source code for the ultimate authority on any given feature. Perl 5's documentation is regarded as excellent,WEB,weblink Thinking In Perl, Lhotsky, Brad, 2004-03-10, even outside of the Perl community where even mixed reviews typically note its maturity and breadth. However, the documentation is not considered authoritative and only describes the behavior of the actual Perl 5 interpreter informally. Any discrepancies found between the documentation and the implementation may lead to either being changed to reflect the other, a dynamic which drives the continuing development and refinement of the Perl 5 releases.

A type system

In Perl 6, the dynamic type system of Perl 5 has been augmented by the addition of static types.WEB,weblink Synopsis 2: Bits and Pieces, Wall, Larry, 2009-05-20, For example:
my Int $i = 0;
my Rat $r = 3.142;
my Str $s = "Hello, world";
However, static typing remains optional, so programmers can do most things without any explicit typing at all:
my $i = "25" + 10; # $i is 35
Perl 6 offers a gradual typing system whereby the programmer may choose to use static typing, use dynamic typing, or mix the two.

Formal subroutine parameter lists

Perl 5 defines subroutines without formal parameter lists at all (though simple parameter counting and some very loose type checking can be done using Perl 5's "prototypes"). Subroutine arguments passed in are aliased into the elements of the array @_. If the elements of @_ are modified, the changes are reflected in the original data.Perl 6 introduces true formal parameters to the language.WEB,weblink Synopsis 6: Subroutines, Wall, Larry, 2003-03-21, In Perl 6, a subroutine declaration looks like this:
sub do_something(Str $thing, Int $other) {
. . .
}
As in Perl 5, the formal parameters (i.e., the variables in the parameter list) are aliases to the actual parameters (the values passed in), but by default, the aliases are constant so they cannot be modified. They may be declared explicitly as read-write aliases for the original value or as copies using the is rw or is copy directives should the programmer require them to be modified locally.

Parameter passing modes

Perl 6 provides three basic modes of parameter passing:
  • Positional
  • Named
  • Slurpy
Positional parameters are the typical ordered list of parameters that most programming languages use. All parameters may also be passed by using their name in an unordered way. A named-only parameter can only be passed by specifying its name (that is, it never captures a positional argument), and are indicated with a leading : character. Slurpy parameters (indicated by an * before the parameter name) are Perl 6's tool for creating variadic functions. A slurpy hash will capture remaining passed-by-name parameters, whereas a slurpy array will capture remaining passed-by-position parameters.Here is an example of the use of all three parameter-passing modes:
sub somefunction($a, $b, :$c, :$d, *@e) {
. . .
}


somefunction(1, 2, :d(3), 4, 5, 6); # $a=1, $b=2, $d=3, @e=(4,5,6)
somefunction(:b, :a); # $a="1", $b="2"
Positional parameters, such as those used above are always required, unless followed by ? to indicate that they are optional. Named parameters are optional by default, but may be marked as required by adding ! after the variable name. Slurpy parameters are always optional.

Blocks and closures

Parameters can also be passed to arbitrary blocks, which act as closures. This is how, for example, for and while loop iterators are named. In the following example, a list is traversed, 3 elements at a time, and passed to the loop's block as the variables, $a, $b, $c.WEB,weblink Synopsis 4: Blocks and Statements, Wall, Larry, 2009-05-20,
for @list -> $a, $b, $c {
. . .
}
This is generally referred to as a "pointy sub" or "pointy block", and the arrow behaves almost exactly like the sub keyword, introducing an anonymous closure (or anonymous subroutine in Perl 5 terminology).

Sigil invariance

In Perl 5, sigils – the punctuation characters that precede a variable name – change depending on how the variable is used:
# Perl 5 code


my {{font color|red|@}}array = ('a', 'b', 'c');
my $element = {{font color|red|$}}array[1]; # $element equals 'b',
my @extract = {{font color|red|@}}array[1, 2]; # @extract equals ('b', 'c')
my $element = {{font color|red|@}}array[1]; # 'b' comes with a warning (5.10 option)
In Perl 6, sigils are invariant, which means that they do not change based on whether it is the array or the array element that is needed:
# Perl 6 code
my {{font color|red|@}}array = 'a', 'b', 'c';
my $element = {{font color|red|@}}array[1]; # $element equals 'b'
my @extract = {{font color|red|@}}array[1]; # @extract equals ('b')
my @extract = {{font color|red|@}}array[1, 2]; # @extract equals ('b', 'c')
The variance in Perl 5 is inspired by number agreement in English and many other natural languages:
"This apple." # $a CORRECT
"These apples." # @a CORRECT
"This third apple." # $a[3] CORRECT
"These third apple." # @a[3] WRONG
However, this conceptual mapping breaks down when references come into play, since they may refer to data structures even though they are scalars. Thus, dealing with nested data structures may require an expression of both singular and plural form in a single term:
  1. Perl 5 code: retrieve a list from the leaf of a hash containing hashes that contain arrays
my @trans_verbs = @{ $dictionary{ 'verb' }{ 'transitive' } };This complexity has no equivalent either in common use of natural language or in other programming languages{{dubious|date=October 2015}}, and it causes high cognitive load when writing code to manipulate complex data structures. Compare this with Perl 6:
# Perl 6 code: retrieve a list from the leaf of a hash containing hashes that contain arrays
my @trans_verbs = %dictionary;

Object-oriented programming

Perl 5 supports object-oriented programming via a mechanism known as blessing. Any reference can be blessed into being an object of a particular class. A blessed object can have methods invoked on it using the "arrow syntax" which will cause Perl to locate or "dispatch" an appropriate subroutine by name, and call it with the blessed variable as its first argument.While extremely powerful, it makes the most common case of object orientation, a struct-like object with some associated code, unnecessarily difficult. In addition, because Perl can make no assumptions about the object model in use, method invocation cannot be optimized very well.In the spirit of making the "easy things easy and hard things possible", Perl 6 retains the blessing model and supplies a more robust object model for the common cases.WEB,weblink Synopsis 12: Objects, Wall, Larry, 2006-08-18, For example, a class to encapsulate a Cartesian point could be defined and used this way:
class Point is rw {
has $.x;
has $.y;
}


my $point = Point.new( x => 1.2, y => -3.7 );


# Now change x (note method "x" used as lvalue):
$point.x = 2;
say "Point is at X location: ", $point.x;
The dot replaces the arrow in a nod to the many other languages (e.g. Java, Python, etc.) that have coalesced around dot as the syntax for method invocation.In the terminology of Perl 6, $.x is called an "attribute". Some languages call these fields or members. The method used to access an attribute is called an "accessor". Auto-accessors are methods that are created automatically, as the method x is in the example above. These accessor functions return the value of the attribute. When a class or individual attribute is declared with the is rw modifier (short for "read/write"), the auto-accessor can be passed a new value to set the attribute to, or it can be directly assigned to as an lvalue (as in the example). Auto-accessors can be replaced by user-defined methods, should the programmer desire a richer interface to an attribute. Attributes can only be accessed directly from within a class definition. All other access must go through the accessor methods.The Perl 6 object system has inspired the Moose framework that introduces many of Perl 6's OOP features to Perl 5.

Roles

Roles in Perl 6 take on the function of interfaces in Java, mixins in Ruby, and traitsWEB, Traits,weblink The Software Composition Group, 2003, in the Smalltalk variant Squeak. These are much like classes, but they provide a safer composition mechanism.WEB, Day 18: Roles,weblink 2009, Jonathan Worthington, These are used to perform composition when used with classes rather than adding to their inheritance chain. Roles define nominal types; they provide semantic names for collections of behavior and state. The fundamental difference between a role and a class is that classes are instantiable; roles are not.WEB, The Why of Perl Roles,weblink chromatic, 2009, chromatic (programmer), Essentially, a role is a bundle of (possibly abstract) methods and attributes that can be added to a class without using inheritance. A role can even be added to an individual object; in this case, Perl 6 will create an anonymous subclass, add the role to the subclass, and change the object's class to the anonymous subclass.For example, a Dog is a Mammal. Dogs inherit certain characteristics from Mammals, such as mammary glands and (through Mammal's parent, Vertebrate) a backbone. Dogs may have one of several distinct types of behavior; for example, a Dog may be a Pet, a Stray, or a Guide for the blind. However, these are simply sets of additional behaviors that can be added to a Dog; a Cat can equally be a Pet or Stray, for example. Hence, Dog and Mammal are classes, while Pet, Stray, and Guide are roles.
class Mammal is Vertebrate {
. . .
}
class Dog is Mammal {
. . .
}
role Pet {
. . .
}
role Stray {
. . .
}
role Guide {
. . .
}
Roles are added to a class or object with the does keyword, as opposed to inheritance's is. The keywords reflect the differing meanings of the two features: role composition gives a class the behavior of the role, but doesn't indicate that it is truly the same thing as the role.
class GuideDog is Dog does Guide {
. . .
} # Subclass composes role


my $dog = new Dog;
$dog does Guide; # Individual object composes role
Although roles are distinct from classes, both are types, so a role can appear in a variable declaration where one would normally put a class. For example, a Blind role for a Human could include an attribute of type Guide; this attribute could contain a Guide Dog, a Guide Horse, a Guide Human, or even a Guide Machine.
class Human {
has Dog $dog; # Can contain any kind of Dog, whether it does the
... # Guide role or not
}
role Blind {
has Guide $guide; # Can contain any object that does the Guide role,
... # whether it is a Dog or something else
}

Regular expressions

Perl's regular expression and string-processing support has always been one of its defining features.WEB,weblink Essential Perl: String Processing with Regular Expressions, Parlante, Nick, 2000, Since Perl's pattern-matching constructs have exceeded the capabilities of regular language expressions for some time,WEB,weblink PERL5 Regular Expression Description, Christiansen, Tom, 1996, Perl's regexps "aren't" -- that is, they aren't "regular" because backreferences per sed and grep are also supported, which renders the language no longer strictly regular, Perl 6 documentation will exclusively refer to them as regexen, distancing the term from the formal definition.Perl 6 provides a superset of Perl 5 features with respect to regexes, folding them into a larger framework called "rules" which provide the capabilities of context-sensitive parsing formalisms (such as the syntactic predicates of parsing expression grammars and ANTLR), as well as acting as a closure with respect to their lexical scope.WEB,weblink Synopsis 5: Regexes and Rules, Wall, Larry, 2009-05-20, Rules are introduced with the rule keyword which has a usage quite similar to subroutine definition. Anonymous rules can also be introduced with the regex (or rx) keyword, or they can simply be used inline as regexps were in Perl 5 via the m (matching) or s (substitute) operators.In Apocalypse 5, Larry Wall enumerated 20 problems with "current regex culture". Among these were that Perl's regexes were "too compact and 'cute'", had "too much reliance on too few metacharacters", "little support for named captures", "little support for grammars", and "poor integration with 'real' language".WEB,weblink Apocalypse 5: Pattern Matching, Wall, Larry, 2002-06-04,

Syntactic simplification

Some Perl 5 constructs have been changed in Perl 6, optimized for different syntactic cues for the most common cases. For example, the parentheses (round brackets) required in control flow constructs in Perl 5 are now optional:
if is_true() {
for @array {
...
}
}
Also, the , (comma) operator is now a list constructor, so enclosing parentheses are no longer required around lists. The code
@array = 1, 2, 3, 4;
now makes @array an array with exactly the elements '1', '2', '3', and '4'.

Chained comparisons

Perl 6 allows comparisons to "chain". That is, a sequence of comparisons such as the following are allowed:
if 20 UInt ) {
if $n == 0 { 1 }
else { $n * fact($n-1) }
}
  1. Using recursion (with `if` as statement modifier)
sub fact( UInt $n --> UInt ) {
return 1 if $n == 0;
return $n * fact($n-1);
}
  1. Using recursion (with `when` construct)
sub fact( UInt $n --> UInt ) {
when $n == 0 { 1 }
default { $n * fact($n-1) }
}
  1. Using the ternary operator
sub fact( UInt $n --> UInt ) {
$n == 0 ?? 1 !! $n * fact($n-1)
}
  1. Using multiple dispatch
multi fact(0) { 1 }multi fact( UInt $n --> UInt ) {
$n * fact($n - 1)
}
  1. Using the reduction metaoperator
multi fact( UInt $n --> UInt ) {
[*] 1..$n
}
  1. Using one of the previous subroutines
  2. and creating a factorial operator
sub postfix:( UInt $n --> UInt ) { [*] 1..$n }
  1. Using `state` declarator to create a
  2. memoized factorial
sub fact( UInt $n --> UInt ) {
state %known = 0 => 1;
return %known{$n} if %known{$n}:exists;
%known{$n} = $n * %known{$n-1};
return %known{$n};
}

Quicksort

Quicksort is a well-known sorting algorithm. A working implementation using the functional programming paradigm can be succinctly written in Perl 6:
# Empty list sorts to the empty list
multi quicksort([]) { () }


# Otherwise, extract first item as pivot...
multi quicksort([$pivot, *@rest]) {
# Partition.
my @before = @rest.grep(* before $pivot);
my @after = @rest.grep(* !before $pivot);


# Sort the partitions.
flat (quicksort(@before), $pivot, quicksort(@after))
}

Tower of Hanoi

Tower of Hanoi is often used to introduce recursive programming in computer science. This implementation uses Perl 6's multi-dispatch mechanism and parametric constraints:
multi sub hanoi(0, $, $, $) { } # No disk, so do not do anything
multi sub hanoi($n, $a = 'A', $b = 'B', $c = 'C') { # Start with $n disks and three pegs A, B, C
hanoi $n - 1, $a, $c, $b; # firstly move top $n - 1 disks from A to B
say "Move disk $n from peg $a to peg $c"; # then move last disk from A to C
hanoi $n - 1, $b, $a, $c; # lastly move $n - 1 disks from B to C
}

Books

In history of Perl 6, there were two waves, when authors had interest to write books. The first wave followed the initial announcement of Perl 6 in 2000. Those books reflect the state of the design of the language of that time, and contain mostly outdated material as of today. The second wave, that followed the announcement of the Version 1.0 in 2015, includes several books that have already been published and some others that are in the process of writing.

Books published before Perl 6 version 1.0 (known as version 6.c)

Also, a book dedicated to one of the first Perl 6's virtual machine, Parrot, was published in 2009.

Books published after Perl 6 version 1.0 (known as version 6.c)

Books to be published

There are a few reportsBooks about Perl 6 from different authors about the new books that they are going to be published soon, all based on the current version 1.0 (known as version 6.c) of Perl 6.

References

{{Reflist|30em}}

External links

  • {{Official website}}
{{Perl|state=collapsed}}{{Use dmy dates|date=October 2018}}

- content above as imported from Wikipedia
- "Perl 6" does not exist on GetWiki (yet)
- time: 12:41pm EDT - Mon, Apr 22 2019
[ this remote article is provided by Wikipedia ]
LATEST EDITS [ see all ]
GETWIKI 09 MAY 2016
GETWIKI 18 OCT 2015
M.R.M. Parrott
Biographies
GETWIKI 20 AUG 2014
GETWIKI 19 AUG 2014
GETWIKI 18 AUG 2014
Wikinfo
Culture
CONNECT