[Perl 6] Examples / Примеры 08 Октябрь 2015, 09:57:30 perl6 testhttps://en.wikibooks.org/wiki/Category:Perl_6_Programminghttp://habrahabr.ru/search/?target_type=posts&q=[perl6]&order_by=date perl6 install (for linux)Код: [Выделить]git clone https://github.com/tadzik/rakudobrew ~/.rakudobrewecho 'export PATH=~/.rakudobrew/bin:$PATH' >> ~/.bashrcsource ~/.bashrcrakudobrew build moarrakudobrew build-pandapanda install Task::StarПримеры:Код: [Выделить]#!/usr/bin/perluse v6;my @squares = <1 2 3 4 5 6 7 8 9 10>;print "\@squares: ";for @squares { print $_ ~ " ";}my @a = (1, 2, 3);# илиmy @a = ^4; # Range# илиmy @a = 1 ... 3; # Lazy list# илиmy @a = 1 .. 3; # Rangemy @squares2 = 1..10;say "\n\@squares2[9] = " ~ @squares2[9];my @squares3 = 1..*;say "\@squares3[999] = " ~ @squares3[999];my @squares4 = (1..10).map(-> $x { $x * $x });say "\@squares4 = " ~ @squares4.join(',');my @squares5 = (1..*).map(-> $x { $x * $x });say "\@squares5[9] = " ~ @squares5[9];1..3 Z+ 4..6; # (5, 7, 9)# Since `Z` is list-associative (see the list above),# you can use it on more than one list(True, False) Z|| (False, False) Z|| (False, False); # (True, False)# And, as it turns out, you can also use the reduce meta-operator with it:[Z||] (True, False), (False, False), (False, False); # (True, False)my @urls = < cpan.org kosciol-spaghetti.pl perlcabal.org duckduckgo.com perl6.org>;my $count = @urls.elems;https://doc.perl6.org/language/5to6-perlfuncЦитатаPerl6 these were changed to: __LINE__ $?LINE __FILE__ $?FILE __PACKAGE__ $?PACKAGE __END__ =begin END __DATA__ =begin DATAТекущая директория:Код: [Выделить]my $folder = $?FILE.IO.absolute;say "Folder $folder is exists: ", $folder.IO.d;В php так:Код: [Выделить]$folder = __DIR__;echo "Folder $folder is exists: ", is_dir($folder);Обход ассоц. массива:Код: [Выделить]# Associative arraymy %drinks = France => 'Wine', Bavaria => 'Beer', USA => 'Coke', Moldova => 'Кагор';for %drinks.kv -> $key, $val{ say "$key: $val";}# France: Wine# Moldova: Кагор# USA: Coke# Bavaria: BeerPerl 6 примеры - https://github.com/perl6/perl6-examples Quote Selected Последнее редактирование: 27 Ноябрь 2018, 14:11:29 by inter 😎
Re: [Perl 6] Examples / Примеры Ответ #1 – 25 Октябрь 2016, 18:48:34 1) Есть в perl 6 инетересная фича - элегантный вызов методов по цепочке с права налево при помощи оператора "двоеточие", в стиле православного языка программирования haskell, смотрим:Вызов методов по старинке:Код: [Выделить]$foo.log( $obj.nukanate( $foo.grep(*.bar).map(*.ber) ) );Новый способ вызова метода:Код: [Выделить]$foo.log: $obj.nukanate: $foo.grep(*.bar).map: *.ber;2) Ещё интересный пример:(Здесь нет перебора и сравнения значений в цикле!)Код: [Выделить]my @args = <-a -e -b>;my $verbose-selected = any(@args) eq '-v' | '-V';if $verbose-selected.not { say "Verbose option not present in arguments";}В python 3 тот же код выглядел бы как-то так:Код: [Выделить]args = ('-a', '-e', '-b')verb_selected = (v in ('-v', '-V') for v in args)if True not in verb_selected: print('Verbose option detected in arguments.')3) В цикле for можно проверять тип элемента:Код: [Выделить]my @a = 1..Inf;for @a[^5] -> Int $i { say $i; }Ссылки по теме:http://perl6.party/post/Perl-6-Shortcuts--Part-1Destructure your Arguments with Perl 6 Signatures Quote Selected Последнее редактирование: 12 Январь 2018, 18:56:14 by inter 😎
Re: [Perl 6] Examples / Примеры Ответ #2 – 27 Октябрь 2016, 20:36:36 Сумма значений элементов массива:php:Код: [Выделить]echo array_sum([1,2,3,4,5,6,7,8,9]);python:Код: [Выделить]print(sum([1,2,3,4,5,6,7,8,9]));perl 6:Код: [Выделить]say [+] (1,2,3,4,5,6,7,8,9);илиКод: [Выделить]say sum (1,2,3,4,5,6,7,8,9); Quote Selected Последнее редактирование: 27 Октябрь 2016, 20:42:59 by inter
Re: [Perl 6] Examples / Примеры Ответ #3 – 31 Октябрь 2016, 10:26:29 Hyper Operatorshttps://docs.perl6.org/language/operators#Hyper_OperatorsПримеры:Код: [Выделить]my @array = 1..^5;@array>>.say; # 1  2  3  4 say (1, 2, 3) »*» 2; # OUTPUT: «(2 4 6)» say (1, 2, 3, 4) »~» <a b>; # OUTPUT: «(1a 2b 3a 4b)» say (1, 2, 3) »+« (4, 5, 6); # OUTPUT: «(5 7 9)» my @a = 1, 2, 3;@a»++; # 2, 3, 4 Quote Selected Последнее редактирование: 16 Январь 2018, 19:44:26 by inter 😎
Re: [Perl 6] Examples / Примеры Ответ #4 – 05 Ноябрь 2016, 10:18:05 Поиск в массиве:Код: [Выделить]# Ищем 2 в массиве справа, если есть - вернётся Truesay 2 (elem) (1,2,3,4,5);# То же самое, но массив слева, а 2 справа, если есть - вернётся Truesay (1,2,3,4,5,6) (cont) 2; Quote Selected Последнее редактирование: 05 Ноябрь 2016, 10:56:19 by inter
Re: [Perl 6] Examples / Примеры Ответ #5 – 05 Ноябрь 2016, 15:02:38 Есть класс с методом even (проверяет числа на чётность):Код: [Выделить]class BetterInt is Int { method even { self %% 2 }}И можно создать объект класса по старинке:Код: [Выделить]my BetterInt $x = BetterInt.new(42);say $x.even();Или так:Код: [Выделить]my BetterInt $x .= new: 42;say $x.even;Или даже уот так уот:Код: [Выделить]my $x = 42 but role { method even { self %% 2 } };say $x.even;Звезда в шоке! Quote Selected Последнее редактирование: 06 Декабрь 2016, 10:39:42 by inter
Re: [Perl 6] Examples / Примеры Ответ #6 – 06 Декабрь 2016, 09:18:20 ИдентификаторыКод: [Выделить]sub test-doesn't-hang { ... }my $ความสงบ = 42;my \Δ = 72; say 72 - Δ;Как вам имя функции test-doesn't-hang ? Quote Selected Последнее редактирование: 06 Декабрь 2016, 09:22:46 by inter
Re: [Perl 6] Examples / Примеры Ответ #7 – 06 Декабрь 2016, 09:28:40 subsetКод: [Выделить] my enum Day ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; subset Weekday of Day where 'Mon' .. 'Fri'; # considered static subset Today of Day where *.today; Parameter # Set of possible values ========= ======================== Int $n # Int Int $n where Today # Int plus dynamic where Int $n where 1 <= * <= 5 # Int plus dynamic where Day $n # 0..6 Day $n where Today # 0..6 plus dynamic where Day $n where 1 <= * <= 5 # 1..5 Int $n where Weekday # 1..5 Day $n where Weekday # 1..5 Weekday $n # 1..5 Tue # 2 Quote Selected Последнее редактирование: 06 Декабрь 2016, 10:37:49 by inter
Re: [Perl 6] Examples / Примеры Ответ #8 – 06 Декабрь 2016, 10:02:38 Сравниваем кол-во строк кода:php5Код: [Выделить]<?phpclass MyFile{ public $path = ''; public function __construct($file) { if (!file_exists($file)) { throw new InvalidArgumentException('File ' . $file . ' not exists'); } $this->path = $file; } public function __toString() { return $this->path; }}function file_size(MyFile $file){ return filesize($file);}$file = new MyFile('C:\Users\inter\Desktop\book.pdf');echo "File: $file\nSize: " . file_size($file);perl6Код: [Выделить]#!/usr/bin/env perl6use v6;subset MyFile of Str where { .IO.f or die "File $_ not exists"; }sub file-size(MyFile $file){ return $file.IO.s;}my $file = 'C:\Users\inter\Desktop\book.pdf';say "File: $file\nSize: " ~ file-size($file);Итог:php - 29 строчек кодаperl6 - 14 строчек кода Quote Selected Последнее редактирование: 06 Декабрь 2016, 10:45:29 by inter
Re: [Perl 6] Examples / Примеры Ответ #9 – 03 Январь 2017, 11:24:33 Интересные примеры создания новых операторов от Samantha McVey (новый разработчик perl 6)Цитата: Samantha McVeyI truly believe #perl6 is the language of the future.twiterПеревод: Я действительно считаю, что perl 6 - язык будущего!Создание собственных операторов в perl 6:Создаём оператор ?=Код: [Выделить]sub infix:< ?= > ($left is rw, $right) { $left = $right if defined $right }my $var;my $new ?= $var; # Ни одна операция не происходит$var = 24;$new ?= $var; # $new получает значение 24Создаём оператор x (умножение значений)Код: [Выделить]sub infix:< x >($left, $right) { $left * $right }say 13 x 3; #> 39 # Умножаем значенияСоздаём оператор ¯\_(ツ)_/¯ (сравнение значений)Код: [Выделить]sub infix:<¯\_(ツ)_/¯>($left, $right) { $left <=> $right }10 ¯\_(ツ)_/¯ 5; #> More5 ¯\_(ツ)_/¯ 5; #> SameСоздаём оператор ⟅ ⟆ (будем переворачивать каждое значение в массиве)Обратите внимание - здесь оператор находится не в середине между значениями (infix), а по краям а-ля обычные скобки (circumfix)!Код: [Выделить]sub circumfix:<⟅ ⟆> ( *@array ) { for @array.keys -> $i { @array[$i] = @array[$i].flip; } @array;}say ⟅'cat', 'dog', 'bird'⟆; #> [tac god drib] Quote Selected Последнее редактирование: 06 Январь 2017, 17:06:59 by inter
Re: [Perl 6] Examples / Примеры Ответ #10 – 12 Июль 2017, 15:51:06 Массивы (всяко-разно)Часть примеров взята из статьи Метаоператоры X и Z в Perl 6 Быстро приводим числовой массив к строковому:Код: [Выделить]my @str = 0..9 X~ '';# Array @str = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]Или то же вот так:Код: [Выделить]my @str = '0'..'9';# Array @str = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]Но! Не делайте вот так:Код: [Выделить]my @str = '0'..'10';# Array @str = ["0", "1"]Сделать ассоциативный массив из списков ключей и значенийКод: [Выделить]my %hash = @keys Z=> @values; Quote Selected Последнее редактирование: 12 Июль 2017, 16:15:04 by inter 😎
Re: [Perl 6] Examples / Примеры Ответ #11 – 12 Июль 2017, 18:46:36 PHP to Perl6htmlspecialchars on Perl6https://github.com/moznion/p6-HTML-Escapeупс я не могу сюда показать код функции, так как некоторые символы меняются движком форума Quote Selected Последнее редактирование: 12 Июль 2017, 19:11:18 by inter 😎
Re: [Perl 6] Examples / Примеры Ответ #12 – 09 Январь 2018, 18:07:31 Perl 6 vs Python 3Задача: через каждые 4 символа строки вставить символ тиреPerl 6Код: [Выделить]say 'abcdefghijk'.comb(4).join('-');Python 3Код: [Выделить]s, a, step = ('abcdefghijk', [], 4)for i in range(0, len(s), step): a.append(s[i:i+step])print('-'.join(a)) Quote Selected Последнее редактирование: 11 Январь 2018, 11:06:02 by inter 😎
Re: [Perl 6] Examples / Примеры Ответ #13 – 16 Январь 2018, 19:12:40 Задачка. 🧐ОтсюдаДано:Код: [Выделить]my @prefixes = 'A'..'E';my @suffixes = 'a'..'e';my @roots = 1, 2;Нужно получить из этих 3-x массивов вот такой массив:[A1a B1b C1c D1d E1e A2a B2b C2c D2d E2e] одно из самых красивых решенийКод: [Выделить]say @roots.map: |(@prefixes >>~>> * <<~<< @postfixes);# (A1a B1b C1c D1d E1e A2a B2b C2c D2d E2e) другие решенияКод: [Выделить]@roots.map: {|((@prefixes X~ $_) Z~ @suffixes)}# (A1a B1b C1c D1d E1e A2a B2b C2c D2d E2e)илиКод: [Выделить]say @roots.map({ (@prefixes X~ $_) Z~ @suffixes }).flat;# (A1a B1b C1c D1d E1e A2a B2b C2c D2d E2e) Quote Selected Последнее редактирование: 16 Январь 2018, 20:26:12 by inter 😎
Re: [Perl 6] Examples / Примеры Ответ #14 – 25 Апрель 2020, 13:31:57 String to lower case, first letter to upper.pythonКод: [Выделить]w = 'ТОП 7 ВСРАТЫХ БЕЗДАРЯМИ КИНОВСЕЛЕННЫХ'print(w[0].upper() + w[1:].lower())# Топ 7 всратых бездарями киновселенныхrakuDoc page - https://docs.raku.org/routine/tclc#class_StrКод: [Выделить]say 'ТОП 7 ВСРАТЫХ БЕЗДАРЯМИ КИНОВСЕЛЕННЫХ'.tclc;# Топ 7 всратых бездарями киновселенных Quote Selected Последнее редактирование: 25 Апрель 2020, 13:40:27 by inter 😎