Perl 6
Perl 6 Delta Tablet: Revision 16

Overview - Chapter: 0:Intr, 1:Hist, 2:Design, 3:Var, 4:Op, 5:IO, 6:{}, 7:Sub, 8:OOP, 9:Rx - Appendices: A:Index, B:Tables, C:Cook, D:Delta, E:Best of, F:Links




Ubiquity

As always, Perl is optimized for freedom and richness of expression.

Less Unix Centric

Perl 1 was a child of the Unix world, borrowing a lot of folklore and words. As Perl 6 had to regularize the Regex and reform some other parts, this heritage has become less visible.

General Purpose

Perl 5 still has a lot of builtins, showing for which task the language was created. But to become more general purpose, the core was enhanced and some other parts got removed. File IO, Network and IPC, Formats, and finally that long deprecated pre P5 DB-binding (dbmopen) went out of the core or at least into sensible module namespace. The optional type system enables compiler optimisations to make Perl even usable in cases where you had to switch to C before.

Simple English

In Perl 5 we had my, our, use, require, bless, can, ISA (is a), chop and also of course if, else, goto and all the loops. Perl 6 adds given, when, take, loop, WHERE, HOW, WHO and lot more everyday english, which should make it easy to read and understand.

Hidden Complexity

Even simple Perl 6 looks pretty much like older Perl, it has a tremendous complexity inside, which only have to show up if you really need it.

Functional Programming

High order functions, currying, you name it. All that goodies are there, as Perl 6 aims to a full support of functional programming.

Object Oriented

OOP syntax is now more simplified, compact, knows about encapsulation and has many new features, including dynamic class composition.

Like in Smalltalk or Ruby every "thing" (values, vars, blocks, routines) is an object and ops are "just" methods. It helps to have internally everything in its place. But programmer still can pretend it's not the case.

Full Introspection

Because every object knows his attributes and methods, you can ask the compiler nearly anything about the state of your program.

Metalanguage

And because classes are made to get extended or changed, Perl 6 has not only full metaprogramming capabilities, beyond your wildest dreams. It is a metalanguage with a beginner friendly default that aimes to become a family of languages. Rule of thumb: everything is allowed, as long as you declare it.

One Spec - Many Implementations

Unlike every other Perl so far, Perl 6 has a precise specification, written in Perl 6. This allows to have several implementations, even syntactical compatible ones.

Syntactical Changes

  • use strict and warnings are on by default
  • consistent sigils: so @array[1] replaces $array[1] and %hash{'key'} replaces $hash{'key'} or @hash{'key', 'key2'}
  • arrays, hashes, formats, directories and filehandles are internal objects with procedural Interfaces and can be saved in scalar variables.
  • special variables have their own namespace ($VARNAME and $?VARNAME), also token (__LINE__) will now be found there
  • Methods: . (dot) replaces -> (arrow) : object.method;
  • concatenate strings: ~ (tilde) instead of . (dot): $string = 'Shinmen Musahashi: ' ~ 'Sho Rin No Sho';
  • smartmatch (regex and more): ~~ instead of =~
  • < ... > replaces qw( ... )(exists still): interpolating << ... >>
  • ternary operator: ?? ... !! ... instead of ? ... : ...
  • no more 'foreach'. 'for' now iterates only on arrays
  • c-style loops: loop ( ; ; ) instead of for ( ; ; )
  • after loop flow control: repeat { ... } while ... ; replaces do { ... } while (...);
  • define classes with 'class' and modules with 'module'
  • no more source filters, but macros
  • no more references, bind variables on the symbol table

News

  • new contexts: hashlist, lazy list, bool, int, num, string
  • optional typing, traits (properties of variables), binding
  • loop and say commands
  • zip, err, yadda and pipe operators
  • hyper / reduction operators
  • chained comparison operators
  • case construct with given and when
  • junctions : if $a = 1|2|3
  • currying
  • smartmatch / rules (regex++, own sublanguage within the language like in Rebol)
  • named parameters for subroutines, multimethods, coroutines
  • more explicit OOP:
    • autogenerated getters/setters
    • roles (similar to Ruby's Mixins, or Java's Interfaces)
  • delegation, design by contract (Eiffel)
  • exceptions, continuations
  • macros

Native Perl 6

  • no parentheses required for control expressions after if, unless, while ... (but still allowed)
  • $hash<key> instead of $hash{'key'}, or $hash<<key>> instead of $hash{"key"}

Overview - Chapter: 0:Intr, 1:Hist, 2:Design, 3:Var, 4:Op, 5:IO, 6:{}, 7:Sub, 8:OOP, 9:Rx - Appendices: A:Index, B:Tables, C:Cook, D:Delta, E:Best of, F:Links


Upload Files

Click "Browse" to find the file you want to upload. When you click "Upload file" your file will be uploaded and added to the list of attachments for this page.

Maximum file size: 50MB

 
 
 
File Name Author Date Uploaded Size

Save Page As

Enter a meaningful and distinctive title for your page.

Page Title:

Tip: You'll be able to find this page later by using the title you choose.

Page Already Exists

There is already a page named XXX. Would you like to:

Save with a different name:

Save the page with the name "XXX"

Append your text to the bottom of the existing page named: "XXX"

Upload Files

Click "Browse" to find the file you want to upload. When you click "Add file" this file will be added to the list of attachments for this page, and uploaded when you save the page.

 
 
 
Add Tags

Enter a tag and click "Add tag". The tag will be saved when you save the page.

Tag: 

Suggestions: