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:Best of, D:Delta, E:Links
Trends
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 where the language is coming from. 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 namespaces. 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, WHERE, HOW, WHO and lot more everyday english which should make it easy to read.
Functional Programming
High order functions, currying, you name it. All that goodies are there, as Perl 6 aims to an full support of functional programming.
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:Best of, D:Delta, E:Links