SlideShare a Scribd company logo
1 of 89
Download to read offline
Creating a Compiler
in Perl 6
Andrew Shitov


German Perl Workshop

Munich, 7 March 2019
PREAMBLE
my $sign =
'(Ⅽ㉍[🚚])[22-6]';
my $sign =
'(Ⅽ㉍[🚚])[22-6]';
Roman numeral 100
grammar Sign {
}
say Sign.parse($sign);
grammar Sign {
rule TOP {
<group>+
}
}
say Sign.parse($sign);
grammar Sign {
rule TOP {
<group>+
}
rule group {
| '(' <element>+ ')' <modifier>?
| <element>
}
}
say Sign.parse($sign);
grammar Sign {
rule TOP {
<group>+
}
rule group {
| '(' <element>+ ')' <modifier>?
| <element>
}
rule element {
<speed> <modifier>?
}
}
say Sign.parse($sign);
grammar Sign {
rule TOP {
<group>+
}
rule group {
| '(' <element>+ ')' <modifier>?
| <element>
}
rule element {
<speed> <modifier>?
}
rule speed {
<:N>
}
}
say Sign.parse($sign);
"a".uniprop('Script');              # OUTPUT: «LatinNL» 
"a" ~~ / <:Script<Latin>> /;        # OUTPUT: «「a」NL» 
"a".uniprop('Block');               # OUTPUT: «Basic LatinNL» 
"a" ~~ / <:Block('Basic Latin')> /; # OUTPUT: «「a」NL» 
.uniprop and <: . . . >
N = Number
Nd = Decimal_Number or digit
Nl = Letter_Number
No = Other_Number
Unicode categories
grammar Sign {
rule TOP {
<group>+
}
rule group {
| '(' <element>+ ')' <modifier>?
| <element>
}
rule element {
<speed> <modifier>?
}
rule speed {
<:N>
}
}
say Sign.parse($sign);
rule element {
<speed> <modifier>?
}
rule speed {
<:N>
}
rule modifier {
'['
[
| <type-modifier>
| <time-modifier>
]
']'
}
}
say Sign.parse($sign);
rule speed {
<:N>
}
rule modifier {
'['
[
| <type-modifier>
| <time-modifier>
]
']'
}
rule type-modifier {
'🚚'
}
}
say Sign.parse($sign);
rule modifier {
'['
[
| <type-modifier>
| <time-modifier>
]
']'
}
rule type-modifier {
'🚚'
}
rule time-modifier {
d+ '-' d+
}
}
say Sign.parse($sign);
my $sign = '(Ⅽ㉍[🚚])[22-6]';
grammar Sign {
. . .
}
say Sign.parse($sign);
「(Ⅽ㉍[🚚])[22-6]」
group => 「(Ⅽ㉍[🚚])[22-6]」
element => 「Ⅽ」
speed => 「Ⅽ」
element => 「㉍[🚚]」
speed => 「㉍」
modifier => 「[🚚]」
type-modifier => 「🚚」
modifier => 「[22-6]」
time-modifier => 「22-6」
「(Ⅽ㉍[🚚])[22-6]」
group => 「(Ⅽ㉍[🚚])[22-6]」
element => 「Ⅽ」
speed => 「Ⅽ」
element => 「㉍[🚚]」
speed => 「㉍」
modifier => 「[🚚]」
type-modifier => 「🚚」
modifier => 「[22-6]」
time-modifier => 「22-6」
「(Ⅽ㉍[🚚])[22-6]」
group => 「(Ⅽ㉍[🚚])[22-6]」
element => 「Ⅽ」
speed => 「Ⅽ」
element => 「㉍[🚚]」
speed => 「㉍」
modifier => 「[🚚]」
type-modifier => 「🚚」
modifier => 「[22-6]」
time-modifier => 「22-6」
「(Ⅽ㉍[🚚])[22-6]」
group => 「(Ⅽ㉍[🚚])[22-6]」
element => 「Ⅽ」
speed => 「Ⅽ」
element => 「㉍[🚚]」
speed => 「㉍」
modifier => 「[🚚]」
type-modifier => 「🚚」
modifier => 「[22-6]」
time-modifier => 「22-6」
MAIN DISH
Compiler
Translator
Interpreter
Lexer + Parser
Abstract Syntax Tree (AST)
Optimise
Converte to byte/binary code



Execute
The Language
Lingua
print 10;
print 20; ## 1020
say "";
my x = "Hello";
print x; ## Hello
say "";
Lingua: create array
my a[];
a = 3, 4, 5;
say a; ## 3, 4, 5
my b[] = 7, 8, 9;
say b; ## 7, 8, 9
Lingua: array elements
my arr[];
my brr[] = 3, 4, 5;
say brr; ## 3, 4, 5
my x = brr[0];
say x; ## 3
say brr[0]; ## 3
say brr[1]; ## 4
say brr[2]; ## 5
Lingua: hashes
my h{};
say h; ##
my g{} = "a": "b", "c": "d";
say g; ## a: b, c: d
Lingua: keys and values
my h{};
my g{} = "a": "b", "c": "d";
say g; ## a: b, c: d
say g{"a"}; ## b
my x = g{"a"};
say x; ## b
Lingua: numbers 1
my int = 42;
say int; ## 42
my float = 3.14;
say float; ## 3.14
my sci = 3E14;
say sci; ## 300000000000000
my negative = -1.2;
say negative; ## -1.2
my zero = 0;
say zero; ## 0
Lingua: numbers 2
my half = .5;
say half; ## 0.5
my minus_n = -.3;
say minus_n; ## -0.3
my x = +7;
say x; ## 7
my y = 4.43E-1;
say y; ## 0.443
Lingua: strings
my s1;
s1 = "Hello, World!";
say s1; ## Hello, World!
my s2 = "Another string";
say s2; ## Another string
my s3 = ""; # Empty string
say s3; ##
Lingua: string indices
my abc = "abcdef";
say abc[0]; ## a
say abc[3]; ## d
say abc[5]; ## f
Lingua: string escaping
say ""; ## 
say ""; ## 
say "$"; ## $
say """; ## "
Lingua: string interpolation
my i = 10;
my f = -1.2;
my c = 1E-2;
my s = "word";
my str = "i=$i, f=$f, c=$c, s=$s";
say str; ## i=10, f=-1.2, c=0.01, s=word
Lingua: variables
my a;
a = 10;
say a; ## 10
my b = 20;
say b; ## 20
Lingua: variables 

as indices and keys
my a[] = 2, 4, 6, 8, 10;
my i = 3;
say a[i]; ## 8
my b{} = "a": 1, "b": 2;
my j = "b";
say b{j}; ## 2
Lingua: expressions 1
my x;
x = 3 + 4;
say x; ## 7
x = 3 - 4;
say x; ## -1
x = 7;
say x; ## 7
x = 1 + 2 + 3;
say x; ## 6
Lingua: expressions 2
x = 1 + 3 + 5 + 7;
say x; ## 16
x = 7 + 8 - 3;
say x; ## 12
x = 14 - 4 - 3;
say x; ## 7
x = 100 - 200 + 300 + 1 - 2;
say x; ## 199
x = 3 * 4;
say x; ## 12
x = 100 / 25;
say x; ## 4
x = 1 + 2 * 3;
say x; ## 7
Lingua: expressions 3
x = 2 ** 3 ** 4;
say x; ## 4096
x = 10 * (20 - 30);
say x; ## -100
x = 10 * 20 - 30;
say x; ## 170
x = (5 * 6);
say x; ## 30
x = (10);
say x; ## 10
x = 1 - (5 * (3 + 4)) / 2;
say x; ## -16.5
Lingua: if
my flag = 1;
if flag say "Printed"; ## Printed
flag = 0;
if flag say "Ignored";
say "Done"; ## Done
Lingua: inline if-else
if 1 say "A" else say "B"; ## A
if 0 say "A" else say "B"; ## B
my x;
if 1 x = 10 else x = 20;
say x; ## 10
if 0 x = 30 else x = 40;
say x; ## 40
Lingua: if-else blocks
my c = 0;
if c {
say "Not printed";
}
else {
say "c = $c";
say "ELSE block";
}
## c = 0
## ELSE block
c = 1;
if c {
say "c = $c";
say "IF block";
}
else {
say "Not printed either";
}
Lingua: comparisons
my x = 10;
my y = 20;
if x > y say ">" else say "<"; ## <
if x < y say ">" else say "<"; ## >
if x != y say "!=" else say "=="; ## !=
if x != x say "!=" else say "=="; ## ==
if x == y say "==" else say "!="; ## !=
if x == x say "==" else say "!="; ## ==
if 5 <= 5 say "5 <= 5"; ## 5 <= 5
if 5 <= 6 say "5 <= 6"; ## 5 <= 6
Lingua: loops 1
my n = 3;
loop n say n;
## 3
## 2
## 1
Lingua: loops 2
my n = 5;
loop n {
my n2 = n * n;
say "n = $n, n2 = $n2";
}
## n = 5, n2 = 25
## n = 4, n2 = 16
## n = 3, n2 = 9
## n = 2, n2 = 4
## n = 1, n2 = 1
Lingua: while
my n = 1;
while n <= 5 {
say n;
n = n + 1
}
## 1
## 2
## 3
## 4
## 5
my k = 1;
while k < 10 k = k + 1;
say k; ## 10
The Code
Part 1. Grammar
grammar Lingua {

rule TOP {

.*

}

}



my $code = 'test.lng'.IO.slurp();

my $result = Lingua.parse($code);

say $result;
rule TOP {

<statement>* %% ';'

}
rule statement {

| <variable-declaration>

| <assignment>

| <function-call>

}
rule variable-declaration {

'my' <variable-name>

}



rule assignment {

<variable-name> '=' <value>

}



rule function-call {

<function-name> <variable-name>

}
token variable-name {

w+

}
token value {

d+

}
rule function-name {

'say'

}
my x;

x = 42;

say x;
my x;

x = 42;

say x
statement => 「my x」

variable-declaration => 「my x」

variable-name => 「x」

statement => 「x = 42」

assignment => 「x = 42」

variable-name => 「x」

value => 「42」

statement => 「say x」

function-call => 「say x」

function-name => 「say 」

variable-name => 「x」
The Code
Part 2. Actions
my %var;



grammar Lingua {

. . .

}
rule variable-declaration {

'my' <variable-name> {

%var{$<variable-name>} = 0;

}

}
rule assignment {

<variable-name> '=' <value> {

%var{~$<variable-name>} = +$<value>;

}

}
rule function-call {

<function-name> <variable-name> {

say %var{$<variable-name>}

if $<function-name> eq 'say';

}

}
rule function-call {


<function-name> <variable-name> {



say %var{$<variable-name>}



if $<function-name> eq 'say';



}



}
Perl 6 Regex Perl 6
The Code
Part 2. Actions
class LinguaActions {

method variable-declaration($/) {

%var{$<variable-name>} = 0;

}



method assignment($/) {

%var{~$<variable-name>} = +$<value>;

}



method function-call($/) {

say %var{$<variable-name>}

if $<function-name> eq 'say';

} 

}
Lingua.parse($code, :actions(LinguaActions));
Parsing numbers
my @cases =

7, 77, -84, '+7', 0,

3.14, -2.78, 5.0, '.5',

'', '-', '+',

'3E4', '-33E55', '3E-3', '-1E-2';
for @cases -> $number {

my $test = Number.parse($number);

say ($test ?? 'OK ' !! 'NOT OK ') ~ $number;

}
grammar Number {

rule TOP {

<number>

}



token number {

d+

}

}
token number {

'-'? d+

}
token number {

<[+-]>? d* ['.' d+]?

}
token number {

<sign>? [

| <integer>

| <floating-point>

| <integer> <exponent>

| <floating-point> <exponent>

]

}
Build the value
method integer($/) {

$n = +$/;

}

AST
Abstract

Syntax

Tree
2 + 3 * 4 / 5 - 6
2 + 3 * 4 / 5 - 6
method integer($/) {

$/.make(+$/);

}

method number($/) {

my $n = $<integer>.made;

$n *= $<sign>.made if $<sign>;

$/.make($n);

}
method TOP($/) {

$/.make($<number>.made);

}
With AST, you defer execution
my condition = 0;

if condition say "Passed";
rule function-call {

['if' <variable-name>]? <function-name> <value>

}
my condition = 0;

if condition say "Passed";
method statement($/) {

if $<condition> {

my $condition = $<condition>.made;

fail unless $condition;

}

}
class ASTNode { 

}



class AST::ScalarDeclaration is ASTNode {

has Str $.variable-name;

has $.value;

}
my a;
my a;
my b = 2;
$ grep class LinguaAST.pm
class ASTNode {
class AST::TOP is ASTNode {
class AST::ScalarDeclaration is ASTNode {
class AST::NumberValue is ASTNode {
class AST::StringValue is ASTNode {
class AST::Null is ASTNode {
class AST::Variable is ASTNode {
class AST::ArrayDeclaration is ASTNode {
class AST::HashDeclaration is ASTNode {
class AST::ScalarAssignment is ASTNode {
class AST::ArrayItemAssignment is ASTNode {
class AST::HashItemAssignment is ASTNode {
class AST::ArrayAssignment is ASTNode {
class AST::HashAssignment is ASTNode {
class AST::MathOperations is ASTNode {
class AST::ArrayItem is ASTNode {
class AST::HashItem is ASTNode {
class AST::FunctionCall is ASTNode {
class AST::Condition is ASTNode {
class AST::Loop is ASTNode {
class AST::While is ASTNode {
github.com/ash/lingua

More Related Content

What's hot

Wx::Perl::Smart
Wx::Perl::SmartWx::Perl::Smart
Wx::Perl::Smartlichtkind
 
Learning Perl 6 (NPW 2007)
Learning Perl 6 (NPW 2007)Learning Perl 6 (NPW 2007)
Learning Perl 6 (NPW 2007)brian d foy
 
Text in search queries with examples in Perl 6
Text in search queries with examples in Perl 6Text in search queries with examples in Perl 6
Text in search queries with examples in Perl 6Andrew Shitov
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Contextlichtkind
 
Business Rules with Brick
Business Rules with BrickBusiness Rules with Brick
Business Rules with Brickbrian d foy
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlordsheumann
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation TutorialLorna Mitchell
 
Benchmarking Perl (Chicago UniForum 2006)
Benchmarking Perl (Chicago UniForum 2006)Benchmarking Perl (Chicago UniForum 2006)
Benchmarking Perl (Chicago UniForum 2006)brian d foy
 
Perl6 Regexen: Reduce the line noise in your code.
Perl6 Regexen: Reduce the line noise in your code.Perl6 Regexen: Reduce the line noise in your code.
Perl6 Regexen: Reduce the line noise in your code.Workhorse Computing
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6garux
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Kang-min Liu
 
R57shell
R57shellR57shell
R57shellady36
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongersbrian d foy
 
Functional Structures in PHP
Functional Structures in PHPFunctional Structures in PHP
Functional Structures in PHPMarcello Duarte
 
Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)Michael Schwern
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In PerlKang-min Liu
 
Advanced modulinos trial
Advanced modulinos trialAdvanced modulinos trial
Advanced modulinos trialbrian d foy
 

What's hot (20)

Wx::Perl::Smart
Wx::Perl::SmartWx::Perl::Smart
Wx::Perl::Smart
 
Learning Perl 6 (NPW 2007)
Learning Perl 6 (NPW 2007)Learning Perl 6 (NPW 2007)
Learning Perl 6 (NPW 2007)
 
Text in search queries with examples in Perl 6
Text in search queries with examples in Perl 6Text in search queries with examples in Perl 6
Text in search queries with examples in Perl 6
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Context
 
Business Rules with Brick
Business Rules with BrickBusiness Rules with Brick
Business Rules with Brick
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlords
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation Tutorial
 
Benchmarking Perl (Chicago UniForum 2006)
Benchmarking Perl (Chicago UniForum 2006)Benchmarking Perl (Chicago UniForum 2006)
Benchmarking Perl (Chicago UniForum 2006)
 
Perl6 Regexen: Reduce the line noise in your code.
Perl6 Regexen: Reduce the line noise in your code.Perl6 Regexen: Reduce the line noise in your code.
Perl6 Regexen: Reduce the line noise in your code.
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)
 
R57shell
R57shellR57shell
R57shell
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongers
 
PHP PPT FILE
PHP PPT FILEPHP PPT FILE
PHP PPT FILE
 
Data Types Master
Data Types MasterData Types Master
Data Types Master
 
Functional Structures in PHP
Functional Structures in PHPFunctional Structures in PHP
Functional Structures in PHP
 
Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)
 
Bag of tricks
Bag of tricksBag of tricks
Bag of tricks
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In Perl
 
Advanced modulinos trial
Advanced modulinos trialAdvanced modulinos trial
Advanced modulinos trial
 

Similar to Creating a compiler in Perl 6

Bouncingballs sh
Bouncingballs shBouncingballs sh
Bouncingballs shBen Pope
 
Adventures in Optimization
Adventures in OptimizationAdventures in Optimization
Adventures in OptimizationDavid Golden
 
Functional Pe(a)rls version 2
Functional Pe(a)rls version 2Functional Pe(a)rls version 2
Functional Pe(a)rls version 2osfameron
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Aslak Hellesøy
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Aslak Hellesøy
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Aslak Hellesøy
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottO'Reilly Media
 
32 shell-programming
32 shell-programming32 shell-programming
32 shell-programmingkayalkarnan
 
Joy of Six - Discover the Joy of Perl 6
Joy of Six - Discover the Joy of Perl 6Joy of Six - Discover the Joy of Perl 6
Joy of Six - Discover the Joy of Perl 6trexy
 
Writing Maintainable Perl
Writing Maintainable PerlWriting Maintainable Perl
Writing Maintainable Perltinypigdotcom
 
WTF Oriented Programming, com Fabio Akita
WTF Oriented Programming, com Fabio AkitaWTF Oriented Programming, com Fabio Akita
WTF Oriented Programming, com Fabio AkitaiMasters
 
Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a bossgsterndale
 
Perl courseparti
Perl coursepartiPerl courseparti
Perl coursepartiernlow
 

Similar to Creating a compiler in Perl 6 (20)

Bouncingballs sh
Bouncingballs shBouncingballs sh
Bouncingballs sh
 
Adventures in Optimization
Adventures in OptimizationAdventures in Optimization
Adventures in Optimization
 
Functional Pe(a)rls version 2
Functional Pe(a)rls version 2Functional Pe(a)rls version 2
Functional Pe(a)rls version 2
 
Php functions
Php functionsPhp functions
Php functions
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009
 
Barcelona.pm Curs1211 sess01
Barcelona.pm Curs1211 sess01Barcelona.pm Curs1211 sess01
Barcelona.pm Curs1211 sess01
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter Scott
 
32 shell-programming
32 shell-programming32 shell-programming
32 shell-programming
 
An introduction to Ruby
An introduction to RubyAn introduction to Ruby
An introduction to Ruby
 
Joy of Six - Discover the Joy of Perl 6
Joy of Six - Discover the Joy of Perl 6Joy of Six - Discover the Joy of Perl 6
Joy of Six - Discover the Joy of Perl 6
 
Writing Maintainable Perl
Writing Maintainable PerlWriting Maintainable Perl
Writing Maintainable Perl
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
Modern Perl
Modern PerlModern Perl
Modern Perl
 
WTF Oriented Programming, com Fabio Akita
WTF Oriented Programming, com Fabio AkitaWTF Oriented Programming, com Fabio Akita
WTF Oriented Programming, com Fabio Akita
 
Mips1
Mips1Mips1
Mips1
 
Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a boss
 
Perl courseparti
Perl coursepartiPerl courseparti
Perl courseparti
 

More from Andrew Shitov

Fun with Raspberry PI (and Perl)
Fun with Raspberry PI (and Perl)Fun with Raspberry PI (and Perl)
Fun with Raspberry PI (and Perl)Andrew Shitov
 
Параллельные вычисления в Perl 6
Параллельные вычисления в Perl 6Параллельные вычисления в Perl 6
Параллельные вычисления в Perl 6Andrew Shitov
 
Perl 7, the story of
Perl 7, the story ofPerl 7, the story of
Perl 7, the story ofAndrew Shitov
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовAndrew Shitov
 
Как очистить массив
Как очистить массивКак очистить массив
Как очистить массивAndrew Shitov
 
What's new in Perl 5.14
What's new in Perl 5.14What's new in Perl 5.14
What's new in Perl 5.14Andrew Shitov
 
Что нового в Perl 5.14
Что нового в Perl 5.14Что нового в Perl 5.14
Что нового в Perl 5.14Andrew Shitov
 
There's more than one way to empty it
There's more than one way to empty itThere's more than one way to empty it
There's more than one way to empty itAndrew Shitov
 
How to clean an array
How to clean an arrayHow to clean an array
How to clean an arrayAndrew Shitov
 
Say Perl на весь мир
Say Perl на весь мирSay Perl на весь мир
Say Perl на весь мирAndrew Shitov
 
Personal Perl 6 compiler
Personal Perl 6 compilerPersonal Perl 6 compiler
Personal Perl 6 compilerAndrew Shitov
 
Perl 5.10 в 2010-м
Perl 5.10 в 2010-мPerl 5.10 в 2010-м
Perl 5.10 в 2010-мAndrew Shitov
 
‎Откуда узнать про Perl 6‎
‎Откуда узнать про Perl 6‎‎Откуда узнать про Perl 6‎
‎Откуда узнать про Perl 6‎Andrew Shitov
 
‎42 £ в ойрах‎
‎42 £ в ойрах‎‎42 £ в ойрах‎
‎42 £ в ойрах‎Andrew Shitov
 
10 мероприятий за 20 месяцев в пяти странах
10 мероприятий за 20 месяцев в пяти странах10 мероприятий за 20 месяцев в пяти странах
10 мероприятий за 20 месяцев в пяти странахAndrew Shitov
 

More from Andrew Shitov (20)

Fun with Raspberry PI (and Perl)
Fun with Raspberry PI (and Perl)Fun with Raspberry PI (and Perl)
Fun with Raspberry PI (and Perl)
 
Параллельные вычисления в Perl 6
Параллельные вычисления в Perl 6Параллельные вычисления в Perl 6
Параллельные вычисления в Perl 6
 
AllPerlBooks.com
AllPerlBooks.comAllPerlBooks.com
AllPerlBooks.com
 
YAPC::Europe 2013
YAPC::Europe 2013YAPC::Europe 2013
YAPC::Europe 2013
 
Perl 7, the story of
Perl 7, the story ofPerl 7, the story of
Perl 7, the story of
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
 
Как очистить массив
Как очистить массивКак очистить массив
Как очистить массив
 
What's new in Perl 5.14
What's new in Perl 5.14What's new in Perl 5.14
What's new in Perl 5.14
 
Что нового в Perl 5.14
Что нового в Perl 5.14Что нового в Perl 5.14
Что нового в Perl 5.14
 
There's more than one way to empty it
There's more than one way to empty itThere's more than one way to empty it
There's more than one way to empty it
 
How to clean an array
How to clean an arrayHow to clean an array
How to clean an array
 
Perl 5.10 и 5.12
Perl 5.10 и 5.12Perl 5.10 и 5.12
Perl 5.10 и 5.12
 
Say Perl на весь мир
Say Perl на весь мирSay Perl на весь мир
Say Perl на весь мир
 
Personal Perl 6 compiler
Personal Perl 6 compilerPersonal Perl 6 compiler
Personal Perl 6 compiler
 
Perl 5.10 in 2010
Perl 5.10 in 2010Perl 5.10 in 2010
Perl 5.10 in 2010
 
Perl 5.10 в 2010-м
Perl 5.10 в 2010-мPerl 5.10 в 2010-м
Perl 5.10 в 2010-м
 
Gearman and Perl
Gearman and PerlGearman and Perl
Gearman and Perl
 
‎Откуда узнать про Perl 6‎
‎Откуда узнать про Perl 6‎‎Откуда узнать про Perl 6‎
‎Откуда узнать про Perl 6‎
 
‎42 £ в ойрах‎
‎42 £ в ойрах‎‎42 £ в ойрах‎
‎42 £ в ойрах‎
 
10 мероприятий за 20 месяцев в пяти странах
10 мероприятий за 20 месяцев в пяти странах10 мероприятий за 20 месяцев в пяти странах
10 мероприятий за 20 месяцев в пяти странах
 

Recently uploaded

CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 

Recently uploaded (20)

CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 

Creating a compiler in Perl 6