The Way of the Camel
The Apocalypse
OOP
Demo
Perl6
The way of the camel
Luca “Syslac” Mezzalira
Montebelluna Linux User Group
26 gennaio 2011 – Montebelluna
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Licenza d’utilizzo
c 2010, Luca “Syslac” Mezzalira.
Copyright Questo documento viene rilasciato secondo i termini della licenza Creative Commons
(http://creativecommons.org).
L’utente è libero di:
distribuire, comunicare al pubblico, rappresentare o esporre in
pubblico la presente opera
alle seguenti condizioni:
Attribuzione Deve riconoscere la paternità dell’opera all’autore originario.
Non commerciale Non può utilizzare quest’opera per scopi commerciali.
Share-Alike Puoi distribuire eventuali modifiche a quest’opera solo con licenza
identica o equivalente a questa.
In occasione di ogni atto di riutilizzazione o distribuzione, deve chiarire agli altri i
termini della licenza di quest’opera.
Se ottiene il permesso dal titolare del diritto d’autore, è possibile rinunciare a ciascuna
di queste condizioni. Le utilizzazioni libere e gli altri diritti non sono in nessun modo
limitati da quanto sopra. Questo è un riassunto in lingua corrente dei concetti chiave
della licenza completa (codice legale), reperibile sul sito Internet
http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Sommario
1
The Way of the Camel
Da dove veniamo
Dove siamo
Dove andiamo
2
The Apocalypse
sub
References
HHP
3
OOP
Tutto è un oggetto
Classi
Grammars
4
Demo
Divertirsi con le liste
Smart Perl
Varie
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Da dove veniamo
Disclaimer
Non è un corso
Sarebbe incredibilmente presuntuoso pensare di poter fare un
corso di programmazione in due ore.
Altrettanto sarebbe pensare di poter fare un corso di perl6 in
due ore.
Quindi, questo non è un corso, ma una panoramica delle novità
più interessanti del perl6, per invogliare chi è interessato ad
iniziare davvero e dargli qualche strumento per farlo.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Da dove veniamo
Disclaimer
Attenzione : progetto in sviluppo
Perl6 è un progetto ancora attivamente sviluppato.
Alcuni dei comportamenti descritti in questa presentazione
erano radicalmente diversi solo all’inizio di quest’anno.
Nel frattempo si è arrivati ad una situazione più stabile, ma non
ci sono garanzie di blocco delle feature.
Esempi
Anche stavolta sono l’autore degli esempi, quindi . . . meglio
starci attenti :D
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Da dove veniamo
Antefatto : Perl è morto
Limitazioni
Concorrenza
In pochi ormai penserebbero di
usare il Perl come strumento
per un progetto di una certa
dimensione, per limitazioni
implicite del linguaggio.
Inoltre, PHP in ambito web, e
Python e Ruby in generale si
sono evoluti più rapidamente
fino a rendere il Perl una scelta
di nicchia.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Da dove veniamo
La concorrenza, appunto. . .
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Da dove veniamo
Cosa si è fatto
Nuovo millennio, nuovo linguaggio
Già nel 2000 c’erano problemi evidenti. Si è quindi
iniziato a pensare ad una riscrittura completa, non
backwards-compatible. Il perl6, appunto.
Contro
Pro
Il progetto era coraggioso
e ha permesso di
sistemare realmente alcuni
problemi.
Perl6
Il progetto era troppo
coraggioso; infatti, fino al
2008-2009 i risultati non
sono stati esaltanti (perl6
restava inutilizzabile)
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Da dove veniamo
Particolarità
Nuovo logo :
1
Specifica
Interpreti
La specifica del linguaggio
(Synopses) è stata sviluppata
indipendentemente da ogni sua
implementazione
Risultato : ci sono “più perl6”,
dato che ogni interprete che
segue la specifica è, in qualche
senso, ufficiale
1
Perl6
Anche se non è un logo, ma un rilevatore di troll
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Dove siamo
Confusi?
Non ce n’è bisogno!
La comunità, da qualche anno, ha scelto di puntare forte
su una sola, Rakudo.
Ogni distribuzione ha portato, o porta, il suo contributo
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Dove siamo
Rakudo
Negli ultimi anni, Rakudo Perl si è affermato come lo standard
di fatto tra le distribuzioni di perl6.
Risorse
In pratica, la quasi totalità della
documentazione su perl6 è
basata su Rakudo.
Perl6
Versioni * (leggi star)
Da luglio 2010, ogni mese
viene rilasciata una versione *
di Rakudo, a useful and usable
distribution of Perl 6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Dove siamo
Dietro a Rakudo
Rakudo gira su Parrot (http://www.parrot.org);
direttamente dalla descrizione del sito “una virtual machine
progettata per compilare ed eseguire efficientemente linguaggi
dinamici”.
TAP
Inoltre, la quantità di test automatici dietro a Rakudo è
impressionante, anche se la maggior parte vengono da un altro
interprete, pugs
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Dove siamo
Cosa funziona
Tutto?
No, non tutto, ma quasi.a
In ogni caso, funzionano un sacco di
features interessanti, che la rendono
valida almeno come piattaforma da
esperimenti.
a
Perl6
I dettagli a http://rakudo.org/status
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Dove siamo
“Problemi” noti
Premature optimization is the root of all evil
Speed So già che i programmatori
“professionisti” si lamenteranno della
velocità di esecuzione, quindi è
meglio dirlo subito . . .
Rakudo è lento, anche molto lento.
Ma non è ancora il momento di
ottimizzarlo.
-O fun
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Dove andiamo
Previsioni
Difficult to see. Always in motion is the future. – Yoda
Synopses Le specifiche del linguaggio ormai hanno un certo
grado di maturazione, difficilmente vedranno
cambiamenti sostanziali.
Rakudo Credo che la prima grande ondata di hacking sia
finita, e che vedremo principalmente bugfixes,
piccole migliorie e miglioramenti di performance
nel prossimo futuro.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Dove andiamo
I can has users?
Lo sviluppo davvero interessante, però, potrebbe essere un
altro.
Utenti Applicazioni scritte in perl6
Moduli Un equivalente del CPAN con nuovo codice
Media Reale attenzione del pubblico sul progetto
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Dove andiamo
Moar userz!
Infatti, finora il problema è stato :
Incompleto ⇒ pochi utenti
Pochi utenti ⇒ pochi test/applicazioni reali/bug report/etc
Poche applicazioni ⇒ poche correzioni
Poche correzioni ⇒ Incompleto
Ma le rakudo star stanno appunto cercando di cambiare
questo stato, per non finire così :
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Qualcosa è cambiato
use v6;
Le migliorie rispetto al perl usato finora ci sono davvero, e sono
notevoli. Vediamo i cambiamenti più evidenti e importanti
Classi Il modello ad oggetti è completamente ripensato
Subs Il programmatore ha molto più controllo sulle
subroutines.
References Quasi completamente scomparse.
Grammars Novità dal lato parsing di testo.
Lambda Il paradigma funzionale è pienamente utilizzabile.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
sub
Signature
Anche in Perl sarà possibile definire delle funzioni in questo
modo :
sub esempio (Num $i)
Types Si possono fare costrizioni di tipo, al di là di $ @ %
sub esempio2 (String :$testo)
Named Si possono passare, e obbligare a passare,
parametri con nome
Pur mantenendo anche le possibilità del perl5 di passaggio di
callables ed altre cose divertenti.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
sub
sub esempio3 ($i is rw, $j is copy, $k is
readonly)
Passaggio Si ha assoluto controllo sul passaggio per
valore/riferimento/etc.
sub esempio4 ($i is rw, *@rest)
Slurpy Si può fare in modo che tutti i parametri “opzionali”
vengano inglobati in un’unica variabile.
sub esempio5 ($i is rw, *%rest)
Slurpy hash Uguale, ma %rest contiene tutti i parametri passati
per nome.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
sub
Where
Si possono forzare anche controlli più precisi sugli argomenti :
sub sqrt(Num $i where {$i > 0 }) { ... }
Potere . . . illimitato
Notare che si può inserire qualunque blocco di codice valido.
L’unica cosa a cui fare attenzione è che il controllo verrà
eseguito ad ogni esecuzione della funzione; può quindi pesare
su funzioni usate spesso.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
sub
Multis
Ora che abbiamo controllo sugli argomenti di una funzione,
niente ci impedisce di sovraccaricare :
multi sub somma (Int $a, Int $b) {
say $a+$b;
}
multi sub somma (String $a, String $b) {
say $a ~ $b;
}
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
References
Flattening
Qual è stata una delle scelte più criticate del perl?
Auto-flattening degli array

array di array?

passaggio di array divisi a funzioni?
⇒ References!


Oggetti?


###Perl5 code
my @a = (1,2,3);
my @b = (4,5,6);
divisi(@a,@b);
### All’interno di function ho perso ogni info
###sul fatto che @a e @b fossero due array distinti
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
References
Nuovo approccio
In Perl6 questo non è il comportamento di default, se la funzione ha
una signature pensata per tenerli divisi.
In ogni caso, Perl vi lascia sempre la possibilità di tirarvi la zappa sui
piedi (sapendo che può essere utile in altri casi)
sub divisi(@a, @b){...} # Se chiamata come prima
# mantiene la distinzione;
sub prova (*@tutto) {...}
# Invece
## Al momento della chiamata
prova(|@a, |@b) ## Appiattisce esplicitamente l’argomento
@arr = [1,2],[3,4] ## Matrice
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
References
Morale
Non è saggio pensare che le references siano completamente
sparite dal perl6. Tuttavia, grazie a :
Maggior controllo sugli argomenti delle funzioni
Nuova sintassi per creazione/accesso array
Classi ed oggetti rivisti
Il loro uso è diventato decisamente trasparente per l’utente, che
può anche ignorarle quasi completamente.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
HHP
Higher Order Perl
Già perl5 permetteva, a chi era interessato, di esplorare la
programmazione funzionale 2
Perl6 ormai dà “supporto ufficiale” a questo paradigma di
programmazione.
Vediamo come
2
Per chi è interessato, appunto, ottimo libro Higher Order Perl, M.J.
Dominus
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
HHP
Cosa
Le funzioni sono oggetti che possono essere passati come
argomenti, ritornate, modificate, etc.
I metodi “standard” spessissimo sono scritti in modo da
essere side-effect-free, cioè ritornare la versione
modificata piuttosto che modificare l’argomento
Un blocco racchiuso da {} di default dà origine ad una
closure
Valutazione lazy delle liste ovunque possibile.
Currying reso facile.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
HHP
Currying Usiamo assuming
sub exp_prova($a, $b) { say $a**$b }
my &exp2 = &exp_prova.assuming(2);
Lazy lists Ogni elemento non viene calcolato finché
necessario, rendendo possibile dichiarare anche
liste infinite.
my @list = 1,2 ... Inf;
Closures & captures Si possono creare funzioni anonime in
ogni momento; è usato ad esempio per dare nomi
alle variabili nei loop;
for @array -> $a, $b { say $a ~ $b }
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Tutto è un oggetto
Ma davvero tutto
Perl6 è un linguaggio realmente orientato agli oggetti
Qualunque tipo abbia una variabile, compresi i builtin e gli
&, sono oggetti
A livello più tecnico, ogni tipo di dato eredita da Any
Effetti concreti? Vediamo un esempio
## Si può scrivere
my $val = 3.14.sin
my $shout = “ciao”.uc
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Tutto è un oggetto
Conosci te stesso
L’altro effetto di questa scelta sarà probabilmente ben noto ai
programmatori Python 3
Il codice stesso può ispezionare gli oggetti per sapere cosa
farne.
Esempi
## Argomenti di una funzione
say &prova.signature.params
## Metodi chiamabili su un numero
say 3.14.^methods
3
Perl6
Infatti, probabilmente l’ispirazione non è casuale
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Classi
class, finalmente
Le influenze
Moose per perl5
Anche se in realtà è stato Moose a prendere da perl6, le
feature sono simili
Linguaggi oop classici
Sintatticamente, perl6 inizia ad assomigliare ad un linguaggio
“normale”
Vediamo da vicino cosa la v6 ha tenuto e cosa ha cambiato
rispetto alle versioni precedenti.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Classi
Esempio
class Client {
has $!number
has $.ip
has $.connected is rw
method new ($ip) {
return self.bless(*,:$ip);
}
}
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Classi
Buttati
Package Perl6 ha abbandonato la relazione
classe-Package che esisteva finora.
Hash Non c’è più l’uguaglianza tra oggetto e *-reference
(di solito hash)
Dati Quindi, i membri dell’oggetto compaiono in quanto
tali, con le loro proprietà
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Classi
Tenuti
Bless La libertà nella forma del costruttore, e la funzione
per l’effettiva creazione dell’oggetto, sono rimaste.
Creazione Leggermente più in profondità, rimane anche il
fatto che il costruttore crea realmente l’oggetto,
non si limita a modificarne lo stato, come in C++ o
Java.
Ereditarietà L’idea alla base è chiaramente la stessa, anche se
ci siamo liberati di @ISA
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Classi
Brand new - Accesso
Controllo dell’accesso ai dati membri.
$! L’argomento è privato.
$. L’argomento è privato, ma viene automaticamente
creato un metodo con lo stesso nome per
accedervi (“pubblicamente”)
$.
Perl6
is rw L’argomento è privato, ma viene automaticamente
creato un metodo con lo stesso nome per
accedervi, che può modificare il dato.
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Classi
Brand new - Ruoli
Role Bearer {
has $!ring;
}
Class Bilbo does Bearer { };
Class Frodo does Bearer { };
Conflitti Idea alternativa all’ereditarietà multipla, con
controllo maggiore sui conflitti.
Runtime Si possono assegnare ruoli a classi a runtime.
Templating Uno dei modi più comuni di usare
programmazione generica in un progetto è
inserirla in un ruolo.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Grammars
Grammars
L’idea
Creare delle “classi” per espressioni regolari.
Rendere organizzato il parsing del testo.
Avere degli oggetti rappresentanti i “match”, su cui
lavorare.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Grammars
Esempio : .fluxbox/apps
grammar Apps {
rule TOP {^ [<option>|<program>]+ $}
rule option { <index> <value>\n }
rule program {
<header>
[\t*<option>]+
<fine>
}
rule header { <index> <descr>\n }
rule fine { \[ end \]\n }
token index { \[ .+? \] }
token value { \{ .+? \} }
token descr { \( .+? \) }
}
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Grammars
Più da vicino
Vediamo intanto l’utilizzo :
if my $parsed = Apps.parsefile(’~/.fluxbox/apps’) {
say join "\n", @($parsed<program>);
say join "\n", @($parsed<option>);
}
Potrei come in questo esempio usarlo per scoprire quali
parti del file parlano di opzioni di startup e quali di opzioni
di programmi.
Ma andiamo al di là dell’esempio particolare, che è meglio
...
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Grammars
Possibilità
Estensibilità Proprio come per le classi, si possono creare
“grammatiche figlie”; ad esempio per permettere i
commenti nel file precedente.
TOP La regex TOP è quella che viene testata se si
esegue il match sulla grammatica, senza
specificare altro.
Dati Volendo, si possono specificare delle “azioni” ad
esempio per costruire un albero dei match.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
“Talk is cheap. Show me the code” – Linus Torvalds
Abbiamo visto perché perl6 dovrebbe essere fantastico
È ora di vedere perché perl6 è veramente fantastico.
E quale modo migliore di farlo che con qualche esempio
funzionante?
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Divertirsi con le liste
Le possibilità
Se venite da MatLab/Octave e sentite la nostalgia degli
operatori puntuali
Se vi capita spesso di applicare metodi ad ogni elemento
ma la sintassi di map vi confonde
Se volete un modo facile per sommare/moltiplicare/etc tra
loro tutti gli elementi di una lista
Non preoccupatevi, perl6 fa tutto questo e di più :D
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Divertirsi con le liste
Ci vuole metodo
Supponiamo di avere una lista di persone4 e che io abbia per
un momento dimenticato la grammatica italiana.
my @names = <linus richard larry eric>;
## Oh, no! Sono tutti nomi propri!
say @names>>.ucfirst;
## stampa : Linus Richard Larry Eric
Ora, mettiamo di voler trovare chi di questi inizia per L :
say @names>>.match(rx/:i ^l/);
4
Perl6
Dai nomi completamente casuali
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Divertirsi con le liste
map
Le possibilità sono limitate solo dai metodi disponibili per il
vostro tipo di dato;
my @a = 0, pi/2, pi ... 4*pi;
say @a>>.sin>>.abs;
La sintassi è una semplificazione di quella del map :
## perl6 code
say map { .sin.abs }, @a;
## perl5 code
print map { abs(sin($_)) } @a;
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Divertirsi con le liste
Iper-facile
Vediamo l’uso degli operatori puntuali, che in perl6 sono
chiamati iperoperatori:
my @names = <Linus Larry>;
my @surnames = <Torvalds Wall>;
say (@names >>~<< @surnames);
# stampa LinusTorvalds LarryWall
E un esempio numerico:
my @n = 1..5;
say (@n <<*>> @n);
# stampa i quadrati : 1,4,9,16,25
5
5
Perl6
La differenza tra «» e »« c’è solo per array di lunghezza diversa
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Divertirsi con le liste
ZeX
Il metaoperatore Z ha lo stesso effetto dei precedenti, cioè
scrivere Z* è esattamente uguale a »*«
Però, Z può essere usato anche da solo, ad esempio :
for @a Z @b -> $a, $b { ... }
## Itera su due array, in parallelo
X invece genera il prodotto cartesiano dei due array :
riprendiamo l’esempio dei nomi :
say (@names X~ @surnames);
## Oltre ai nomi giusti, genera
## LinusWall e LarryTorvalds
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Divertirsi con le liste
Somme e prodotti
Sommiamo i primi 100 numeri
Nessun bisogno di algoritmi di Gauss6 o trucchi vari.
say [+] 1..100;
Calcoliamo il fattoriale!
sub postfix:<!> { [*] 1..$^n };
say 6!;
6
Perl6
Non citato a caso
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Divertirsi con le liste
Operatori inattesi
Si può usare anche con operatori meno “intuitivi” delle somme
o dei prodotti;
A proposito di algoritmi di Gauss, verifichiamo che l’idea alla
base funziona.
my @a = 1..100;
my @b = 100,99 ... 1;
say "Funziona!" if ([==] (@a >>+<< @b));
O come in questo caso, verifichiamo che le due liste siano già
ordinate :
say "Ordine crescente" if ([<=] @a);
say "Ordine decrescente" if ([>=] @b);
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Divertirsi con le liste
Sequenze
Magari pensate che nelle slide precedenti io abbia imbrogliato
tagliando l’input :
my @a = 0, pi/2, pi ... 4*pi;
L’operatore ... riconosce invece le sequenze più comuni
Con almeno due termini può riconoscere una successione
aritmetica
Con almeno tre termini una successione geometrica
my @a = 2,4 ... 20;
my @a = 1,3,9 ... 243;
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Divertirsi con le liste
Giochiamo con le mie regole
L’utente può specificare le regole con cui proseguire la
successione : un’altro modo di specificare una successione
decrescente a salti, ad esempio :
my @a = 100, *-5 ... 0;
Fino ad arrivare alla potente magia nera di questo esempio :
my @fib = (1,1, *+* ... ^* > 1000000);
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Smart Perl
Smart matching
Un altro operatore degno di nota è ~~:
say “cifra singola” if $var ~~ 0..9
Controlla se un numero è in un certo
intervallo.
say “match!”
if $string ~~ m/ˆ\w+ $/
Esegue il match per espressione regolare.
say “Frazione” if $var ~~ Rat
Controlli sul tipo.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Smart Perl
Sintassi diversa, stessa idea
Abbiamo già introdotto il where :
sub sqrt (Num $x where {* > 0}) { ... }
subset integer of Rat where .denominator == 1;
my $y = 5.Rat;
say "ok" if $y ~~ integer
Anche in questo caso, il meccanismo sottostante è quello
dello smart matching.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Smart Perl
Sveliamo il trucco
perl controlla il metodo ACCEPTS per la classe giusta.
Esempio : dipendenza lineare
class Vector2 {
has $.x1;
has $.x2;
method ACCEPTS(Vector2 $y) {
return ($y.x1/$.x1 == $y.x2/$.x2);
}
}
my $v1 = Vector2.new( x1 => 1, x2 => 1);
my $v2 = Vector2.new( x1 => 5, x2 => 5);
my $v3 = Vector2.new( x1 => 7, x2 => 5);
say $v1 ~~ $v2; ## True
say $v1 ~~ $v3; ## False
Il potenziale per definire relazioni di equivalenza è ben chiaro.
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Varie
Testo
say (1..100).fmt("%03d", ",")
# Stampa 001, 002 ... 010 ... 099, 100
# Già separati da virgole
fmt unisce le funzionalità di printf . . .
. . . a quelle di join e kv
my $text = "1primo2secondo ... 10decimo ...";
my @keys = $text.comb(rx/\d+/);
my @values = $text.split(rx/\d+/);
comb funziona allo stesso modo di split . . .
. . . ma restituendo i separatori invece dei “separati”
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Varie
Ci sarebbe molto altro . . .
Si potrebbe parlare di molto altro, ad esempio . . .
Il sort con comparatori definiti dall’utente esegue
automaticamente una Schwartzian transform quando può
Molto di più sugli asterischi magici, Whatever, . . .
I nuovi e furbi randomizzatori per array
Gli operatori pipe ==>
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Varie
Fonti
. . . ma per questo e ancora altro, vi consiglio di passare da
http://www.perl6advent.wordpress.com
Perl6
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Varie
Letture consigliate per approfondire. . .
Autori vari, Using Perl6
Moritz Lenz Perl5 to 67
Online
http://www.perl6.org
http://perl6advent.wordpress.com
http://www.rakudo.org
http://try.rakudo.org
7
Perl6
http://perlgeek.de/en/article/5-to-6 – un po’ datato
MontelLUG
The Way of the Camel
The Apocalypse
OOP
Demo
Varie
Grazie per l’attenzione
Domande?
Perl6
MontelLUG
Scarica

Perl6 - The way of the camel