Migrating from Perl 5 to 6
-
Upload
andysh -
Category
Technology
-
view
901 -
download
2
description
Transcript of Migrating from Perl 5 to 6
![Page 1: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/1.jpg)
s/5/6/
![Page 2: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/2.jpg)
Perl 6
![Page 3: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/3.jpg)
Perl 6Дизайн
![Page 4: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/4.jpg)
Perl 6Дизайн Реализация
![Page 5: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/5.jpg)
Apocalypses, Exegeses, Synopses
![Page 6: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/6.jpg)
STD.pm
![Page 7: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/7.jpg)
Pugs
![Page 8: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/8.jpg)
svn co http://svn.pugscode.org/pugs
cd pugs
perl Makefile.PL
make
make test
![Page 9: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/9.jpg)
svn co http://svn.pugscode.org/pugs
cd pugs
perl Makefile.PL
make
make test
install GHC
. . .
. . .
![Page 10: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/10.jpg)
Rakudo
![Page 11: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/11.jpg)
svn co https://svn.perl.org/parrot/
trunk parrot
perl Configure.pl
make
cd languages/perl6/
make perl6
![Page 12: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/12.jpg)
./perl6
perl6.exe
![Page 13: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/13.jpg)
Программа
Компилятор
Виртуальная машина
Байт-код
![Page 14: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/14.jpg)
Программа
Компилятор
Виртуальная машина
Байт-код
![Page 15: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/15.jpg)
BasicForthJakoLispm4OokPerl 6Perl 5PythonRubySchemeTcl
![Page 16: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/16.jpg)
BasicForthJakoLispm4OokPerl 6Perl 5PythonRubySchemeTcl
байт-код
![Page 17: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/17.jpg)
BasicForthJakoLispm4OokPerl 6Perl 5PythonRubySchemeTcl
LOL-код
![Page 18: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/18.jpg)
Хаффманизизация
![Page 19: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/19.jpg)
print "Hello, World!";
![Page 20: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/20.jpg)
say "は、ラクダの方法";
![Page 21: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/21.jpg)
"は、ラクダの方法".say;
![Page 22: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/22.jpg)
my $ναριαβλε = "は、ラクダの方法";
![Page 23: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/23.jpg)
$str.chars;
$str.bytes;
$str.glyphs;
![Page 24: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/24.jpg)
my $lang = "Perl 5";
$lang++;
say $lang;
![Page 25: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/25.jpg)
my @arr = (0..5);
say $arr[2];
![Page 26: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/26.jpg)
my @arr = (0..5);
say @arr[2];
![Page 27: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/27.jpg)
my @arr = (0..5);
say @arr[2, 3];
![Page 28: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/28.jpg)
my @arr = (0..5);
say @arr.elems;
![Page 29: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/29.jpg)
my %hash = (
city => "Rostov‐on‐Don",
year => 2008
);
say $hash{city};
![Page 30: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/30.jpg)
my %hash = (
city => "Rostov‐on‐Don",
year => 2008
);
say %hash<city>;
![Page 31: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/31.jpg)
my %hash =
city => "Rostov‐on‐Don",
year => 2008
;
say %hash<city year>;
![Page 32: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/32.jpg)
my %hash =
city => "Rostov‐on‐Don",
year => 2008
;
say %hash.kv;
![Page 33: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/33.jpg)
if ($latitude > 47.2 &&
$latitude < 47.3) {
print "Rostov‐on‐Don\n";
}
![Page 34: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/34.jpg)
if 47.2 < $latitude < 47.3 {
say "Rostov‐on‐Don";
}
![Page 35: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/35.jpg)
Контексты
![Page 36: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/36.jpg)
my @array = (5..10);
say ~@array;
5 6 7 8 9 10
![Page 37: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/37.jpg)
my @array = (5..10);
say +@array;
6
![Page 38: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/38.jpg)
my @array = (5..10);
say ~ hash @array;
5 6 7 8 9 10
![Page 39: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/39.jpg)
my @array = (5..10);
say ?+@array;
![Page 40: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/40.jpg)
"Ростов"
. "‐на‐"
. "Дону";
![Page 41: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/41.jpg)
"Ростов"
~ "‐на‐"
~ "Дону";
![Page 42: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/42.jpg)
Функции
![Page 43: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/43.jpg)
sub flight($from, $to) { say "$from ‐‐> $to";}
flight("Москва", "Ростов‐на‐Дону");
![Page 44: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/44.jpg)
sub flight($from, $to) { say "$from ‐‐> $to";}
flight "Москва", "Ростов‐на‐Дону";
![Page 45: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/45.jpg)
sub flight($from, $to) { say "$from ‐‐> $to";}
flight from => "Москва", to => "Ростов‐на‐Дону";
![Page 46: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/46.jpg)
sub choose(@a, @b) { return any(@a) < all(@b) ?? 1 !! 2;}
say choose( @SkyExpressPrices, @AeroflotPrices);
![Page 47: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/47.jpg)
Циклы
![Page 48: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/48.jpg)
for @list { say $_;}
![Page 49: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/49.jpg)
for @list ‐> $x { say $x;}
![Page 50: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/50.jpg)
for @list ‐> $x, $y { say $x + $y;}
![Page 51: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/51.jpg)
for @list, sub($x, $y) { . . . }
![Page 52: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/52.jpg)
loop(my $t = 300; $t; $t‐‐) {
sleep 1;
};
say "cunt";
![Page 53: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/53.jpg)
Гипероператоры
![Page 54: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/54.jpg)
my @Flight = (...);
my @Food = (...);
![Page 55: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/55.jpg)
my @Flight = (...);
my @Food = (...);
my @FullPrice =
@Flight >>+<< @Food;
![Page 56: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/56.jpg)
my @Flight = (...);
my @Food = (...);
my @FullPrice =
@Flight >>+<< @Food;
@FullPrice >>+=<< $Fuel;
![Page 57: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/57.jpg)
my @Flight = (...);
my @Food = (...);
my @FullPrice =
@Flight »+« @Food;
@FullPrice »+=« $Fuel;
![Page 58: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/58.jpg)
Объединения
![Page 59: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/59.jpg)
Объединения
(квантовые суперпозиции)
![Page 60: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/60.jpg)
sub choose(@a, @b) { return any(@a) < all(@b) ?? 1 !! 2;}
![Page 61: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/61.jpg)
say 1 if 20 == 10 | 20 | 30;
![Page 62: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/62.jpg)
say 1 if 20 == 10 | 20 | 30;
say 1 if 20 == any(10, 20, 30);
![Page 63: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/63.jpg)
say 1 if 20 == none(1, 2, 3);
![Page 64: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/64.jpg)
Перегрузка операторов и функций
![Page 65: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/65.jpg)
Перегрузка операторов и функций
(множественная диспетчеризация)
![Page 66: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/66.jpg)
1 + 2
1.1 + 2.2
![Page 67: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/67.jpg)
multi sub
elections($candidate);
multi sub
elections(@candidates);
![Page 68: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/68.jpg)
multi infix:<+> ($a, $b) { return $a ‐ $b;}
say 10 + 20; ‐10
![Page 69: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/69.jpg)
multi postfix:<!> ($n) { return [*] 1..$n;}
say 2008!;
![Page 70: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/70.jpg)
multi postfix:<!> ($n) { return [*] 1..$n;}
say 2008!;
![Page 71: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/71.jpg)
Perl 6 в Perl 5
![Page 72: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/72.jpg)
Perl 6 в Perl 5
Perl 5.10
![Page 73: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/73.jpg)
use feature qw( say switch state);
![Page 74: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/74.jpg)
> perl5.10 ‐e \ "use feature qw(say); say $$;"
> perl5.10 ‐E "say $$;"
![Page 75: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/75.jpg)
//
defined‐or
![Page 76: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/76.jpg)
my $a;my $b = $a // 2;say $b; 2
![Page 77: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/77.jpg)
my $c = 0;my $d = $c // 3;say $d; 0
my $e = 0;my $f = $e || 4;say $f; 4
![Page 78: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/78.jpg)
~~
![Page 79: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/79.jpg)
~~Смарт-матчинг
(оператор сопоставления)
![Page 80: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/80.jpg)
$a ~~ $b==
$b ~~ $a
![Page 81: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/81.jpg)
my $b;
$b ~~ undef
!defined $b
![Page 82: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/82.jpg)
my $c = 'abc';
$c ~~ 'abc'
$c eq 'abc'
![Page 83: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/83.jpg)
my $c = 'abc';
$c ~~ /b/
$c =~ /b/
![Page 84: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/84.jpg)
my @a = (1..3);my @b = (1..3);
@a ~~ @b
1 == 1 && 2 == 2 && 3 == 3
![Page 85: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/85.jpg)
my @a = (1..3);my @b = (1..3);my @c = (3..5);
@a ~~ @c
1 == 3 && 2 == 4 && 3 == 5
![Page 86: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/86.jpg)
my @d = (123, 'abc');my @e = (qr/\d/, qr/\w/);
@d ~~ @e
123 ~~ /\d/ &&'abc' ~~ /\w/
![Page 87: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/87.jpg)
my @f = ('a'..'f');
@f ~~ 'd'
grep {$_ eq 'd'} @f
![Page 88: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/88.jpg)
my @g = (1..10);
@g ~~ 7
grep {$_ == 7} @g
![Page 89: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/89.jpg)
my @g = (1..10);
@g ~~ 7.0
grep {$_ == 7.0} @g
![Page 90: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/90.jpg)
my @g = (1..10);
@g ~~ '7.0'
grep {$_ eq '7.0'} @g
![Page 91: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/91.jpg)
my @g = (1..10);
@g ~~ /^\d$/
grep {$_ =~ /^\d$/} @g
![Page 92: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/92.jpg)
sub subA {return 2}sub subB {return 2}
subA ~~ subB
subA() == subB()
![Page 93: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/93.jpg)
my %h = (a => 'alpha', b => 'beta');
%h ~~ 'a'
exists $h{'a'}
![Page 94: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/94.jpg)
my %h = (a => 'alpha', b => 'beta');
%h ~~ /[A‐F]/i
grep {/[A‐F]/i} keys %h
![Page 95: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/95.jpg)
my %h = (a => 'alpha', b => 'beta');my %hh = (b => 1, a => 2);
%h ~~ %hh
[sort keys %h] ~~[sort keys %hh]
![Page 96: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/96.jpg)
В печати
![Page 97: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/97.jpg)
Июнь 2003
![Page 98: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/98.jpg)
Июнь 2004
![Page 99: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/99.jpg)
Июнь 2004 2005
![Page 100: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/100.jpg)
2005
![Page 101: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/101.jpg)
2007?
![Page 102: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/102.jpg)
![Page 103: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/103.jpg)
![Page 104: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/104.jpg)
real.perl6.ru
![Page 105: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/105.jpg)
int main() { char* argv[] = {
"parrot",
getenv ("PATH_TRANSLATED"),
NULL
}; execvp("/parrot‐0.1.0/parrot", argv); return 0;}
![Page 106: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/106.jpg)
my @keys = ( 'SERVER_NAME', 'REMOTE_ADDR', 'HTTP_USER_AGENT');my $key;foreach $key (@keys){ print1 "$key=%ENV{$key}<br />";}
![Page 107: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/107.jpg)
my @keys = ( 'SERVER_NAME', 'REMOTE_ADDR', 'HTTP_USER_AGENT');my $key;foreach $key (@keys){ print1 "$key=%ENV{$key}<br />";}
![Page 108: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/108.jpg)
sub params2hash( %params, @params_key, @params_value){ for 0 .. @params_key ‐> $c { %params{@params_key[$c]} = @params_value[$c]; }}
![Page 109: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/109.jpg)
.include "counter.imc"
open P0, "counter.txt"readline S0, P0set I0, S0inc I0set I2, 0seek P0, I2, I2print P0, I0close P0
![Page 110: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/110.jpg)
November
![Page 111: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/111.jpg)
yapc.tv/2008/ye/lt/lt2-01-masak-vilkund-november
![Page 112: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/112.jpg)
yapc.tv/2008/fe/irhd-november
![Page 113: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/113.jpg)
November
november-wiki.orgnovember.perl6.ru
![Page 114: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/114.jpg)
$ git clone \ git://github.com/viklund/november.git
![Page 115: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/115.jpg)
$ cd p6w$ perl Makefile.PL
$ make
![Page 116: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/116.jpg)
/software/parrot/parrot /software/
parrot/languages/perl6/perl6.pbc ‐‐
target=pir Impatience.pm >
Impatience.pir
/software/parrot/parrot /software/
parrot/languages/perl6/perl6.pbc ‐‐
target=pir HTML/Template.pm > HTML/
Template.pir
![Page 117: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/117.jpg)
/software/parrot/parrot /software/
parrot/languages/perl6/perl6.pbc ‐‐
target=pir Impatience.pm >
Impatience.pir
/software/parrot/parrot /software/
parrot/languages/perl6/perl6.pbc ‐‐
target=pir HTML/Template.pm > HTML/
Template.pir
![Page 118: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/118.jpg)
#!perl6
use v6;
use CGI;
use Wiki;
my Wiki $wiki = Wiki.new;
$wiki.init();
my $cgi = CGI.new;
$cgi.init();
$wiki.handle_request($cgi);
![Page 119: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/119.jpg)
Классы и роли
![Page 120: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/120.jpg)
class Wiki does Session {
my $.template_path is rw;
my $.userfile_path is rw;
has Storage $.storage is rw;
has CGI $.cgi is rw;
. . .
}
![Page 121: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/121.jpg)
method handle_request(CGI $cgi) { $.cgi = $cgi;
my $action = $cgi.param<action> // 'view';
given $action { when 'view' { self.view_page(); return; } when 'edit' { self.edit_page(); return; } when 'log_in' { self.log_in(); return; } } self.not_found();}
![Page 122: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/122.jpg)
has Storage $.storage is rw;
class Storage { . . .}class Storage::File is Storage { . . .}
$.storage = Storage::File.new();$.storage.init();
![Page 123: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/123.jpg)
my $input = $*IN.slurp();
self.parse_params(%params, $input);
![Page 124: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/124.jpg)
Грамматика
![Page 125: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/125.jpg)
if $par ~~
Text::Markup::Wiki::Minimal::Syntax::paragraph {
. . .
}
else {
$result = '<p>Could not parse paragraph.</p>';
}
![Page 126: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/126.jpg)
grammar Text::Markup::Wiki::Minimal::Syntax { token paragraph { ^ [<heading> || <parchunk>+] $ };
token heading { '==' <parchunk>+ '==' };
token parchunk { <twext> || <wikimark> || <metachar> || <malformed> };
token twext { [ <.alnum> || <.otherchar> || <.whitespace> ] + };
token otherchar { <[ !..% (../ : ; ? @ \\ ^..` {..~ ]> };
token whitespace { ' ' | \n };
token wikimark { '[[' <twext> ']]' };
token metachar { '<' || '>' || '&' || \' };
token malformed { '[' || ']' }}
![Page 127: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/127.jpg)
grammar Text::Markup::Wiki::Minimal::Syntax {
}
![Page 128: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/128.jpg)
token paragraph { ^ [<heading> || <parchunk>+] $};
![Page 129: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/129.jpg)
token heading { '==' <parchunk>+ '=='
};
![Page 130: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/130.jpg)
Highload
![Page 131: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/131.jpg)
Что такое нагрузка?
![Page 132: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/132.jpg)
Что такое нагрузка?
От 1 000 000посетитлей?
![Page 133: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/133.jpg)
Что такое нагрузка?
Или от одногокомпилятора?
![Page 134: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/134.jpg)
Highload++в реализации
![Page 135: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/135.jpg)
Perl 6 не один
Pugs
Rakudo
SMOPKindaPerl6
Elf
![Page 136: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/136.jpg)
Не только script.pl
Исходник .pl
Ассемблер .pir
Байт-код .pbc
![Page 137: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/137.jpg)
Веб-серверов много
Apache CGI
mod_perl
Ваш любимый сервер
![Page 138: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/138.jpg)
Сколькоспособов
оптимизации?
(МНОГО)
![Page 139: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/139.jpg)
Компиляция в байт-код
![Page 140: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/140.jpg)
Компиляция в байт-код
programme.pl
programme.pbc
Компилятор
Виртуальная машина
![Page 141: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/141.jpg)
Компиляция в байт-код
programme.pl
programme.pbc
Компилятор
Виртуальная машина + JIT
![Page 142: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/142.jpg)
Прекомпилированные модули
use Module;
Module.pir Module.pm
![Page 143: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/143.jpg)
Parrot::Embed
(Байткод, исполняемый в Perl 5)
![Page 144: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/144.jpg)
mod_parrot
(Аналог mod_perl, но для байткода)
![Page 145: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/145.jpg)
Nginx / 0W / mod_proxy
(Абсолютно стандартно)
![Page 146: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/146.jpg)
Компиляция в байт-код
Nginx / 0W / mod_proxy
Parrot::Embed
mod_parrot
Прекомпилированные модули
![Page 147: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/147.jpg)
++Highloadв дизайне
![Page 148: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/148.jpg)
Lazy lists
Директива async
Распараллеленные гипероператоры
![Page 149: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/149.jpg)
Многое реализованов самой виртуальной машине
![Page 150: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/150.jpg)
$ time pugs ‐e'say "HL++"'
real 0m0.382suser 0m0.348ssys 0m0.031s
Hello, World++ (Pugs)
![Page 151: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/151.jpg)
$ time perl6 ‐e'say "HL++"'
real 0m0.389suser 0m0.307ssys 0m0.061s
Hello, World++ (Rakudo)
![Page 152: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/152.jpg)
(Одинаково медленно)
![Page 153: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/153.jpg)
$ time wget http://real.perl6.ru
real 0m0.034suser 0m0.003ssys 0m0.001s
Пример с байткодом (VPS Apache CGI)
![Page 154: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/154.jpg)
$ time wget http://november.perl6.ru
real 0m0.027suser 0m0.003ssys 0m0.001s
Пример с кешем (VPS Apache CGI)
![Page 155: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/155.jpg)
(Одинаково быстро)
![Page 156: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/156.jpg)
Перспективы
Улучшенный синтаксический разбор
Новый JIT-компилятор
Новый сборщик мусора
![Page 157: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/157.jpg)
dev.perl.org/perl6
![Page 158: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/158.jpg)
rakudo.org
![Page 159: Migrating from Perl 5 to 6](https://reader033.fdocuments.us/reader033/viewer/2022042601/546ce99aaf795971298b50c5/html5/thumbnails/159.jpg)
perl6.ru