Перейти к основному содержанию
Тема: [Perl 6] Perl 6 для php-программиста (Прочитано 2005 раз) предыдущая тема - следующая тема

[Perl 6] Perl 6 для php-программиста

Статья в разработке.
Здесь будет таблица с примерами: слева код на php, справа код на perl 6.

Здесь можно поиграться с perl6 онлайн.

php 5 или 7perl 6
echo 100500, "\n";
say 100500;
Array
$a = [1, 'two', 35];
echo gettype($a), "\n"; // array;
echo is_array($a), "\n"; // 1
echo 'total: ', count($a), "\n"; // 4
echo 'last: ', $a[count($a)-1], "\n"; // 35
Array
my @a = 1, 'two', 35;
say @a.^name; # Array
say @a ~~ Array; # True
say 'total: ', @a.elems; # 4
say 'last: ', @a[*-1]; # 35
foreach
foreach ($a as $key -> $val) {
    echo "$key - $val\n";
}
for
for @a.kv -> $key, $val {
    say "$key - $val";
}
Ассоциативный массив:
$man = ['name' => 'Ваня Иванов', 'age' => 20];
print_r($man);
echo $man['age'];
$man['height'] = 190;
Hash
my %man = name => 'Ваня Иванов', age => 20;
dd %man;
print %man<age>;
%man<height> = 190;
Вместо %h<key> можно использовать вот так: %h{'key'},
например, если у вас есть пробелы в ключе
Map, анонимная функция
$a = [1, 'two', 3];
$b = array_map(function($v){return is_int($v) ? $v * 3 : 1;}, $a);
print_r($b); #  [3, 1, 9]
Map, анонимная функция
my @a = 1, 'two', 3;
my @b = @a.map({$_ ~~ Int ?? $_ * 3 !! 1});
dd @b; # [3, 1, 9]

# Вторую строчку можно ещё так:
# my @b = @a.map(-> $v {$v ~~ Int ?? $v * 3 !! 1});
Поиск в массиве
$arr = [1, 2, 3, 4, 5];
var_dump(in_array(3, $arr)); # bool(true)
Поиск в массиве
my @arr = [1, 2, 3, 4, 5];
say 3 (elem) @arr; # True
OOP. Private method:
private function clean_data() {
    # ...
}
OOP. Private method:
method !clean-data {
    # ...
}
Function args: ...
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4); # 10
Function args: * (slurpy)
sub sum-custom(*@numbers) {
    my $acc = 0;
    for @numbers -> $n {
        $acc += $n;
    }
    return $acc;

    # Код выше можно заменить одной строкой:
    # [+] @numbers;
    #
    # или так:
    # @numbers.reduce: * + *;
    #
    # p.s. Функция sum уже есть в языке
}

print sum-custom 1, 2, 3, 4; # 10
Строки.
Поиск символа
Строки.
Поиск символа
$s = 'abcdefgh';
echo strpos($s, 'b'), "\n";
А теперь проверим и напишем позицию символа в строке:
$s = 'abcdefgh';
$f = strpos($s, 'b');
if ($f !== false) {
    echo 'Found b at ', $f, "\n";
}
my $s = 'abcdefgh';
say $s.index('b');
А теперь проверим и напишем позицию символа в строке:
my $s = 'abcdefgh';
with $s.index('b') {
    say 'Found b at ', $_;
}
Конструкция with работает как if defined(результат-вашего-кода), результат проверки вносит в свой блок в переменную $_. До и после блока with переменная $_ не изменяется.

Re: [Perl 6] Perl 6 для php-программиста

Ответ #1
php
echo __DIR__;
perl6
say $?FILE.IO.absolute;