2017年7月15日土曜日

開発環境

Perl もできるなら、Perl 6でも可能なのか気になったから、同様のコードで試して見た。

コード(Emacs)

perl 6

#!/usr/bin/env perl6
# -*- coding: utf-8 -*-

my $a = 1;
my $b = 2;
say "a = $a, b = $b";
($a < $b ?? $a !! $b) = 0;
say "a = $a, b = $b";

my $str = "foobar";
# substr($str, 3, 3) = 'dan'; # foodan
# say $str;

# せっかく Perl 6 なので Perl 5 とは他の書き方で試して見た
$str.substr(3, 3) = 'dan';
say $str;

入出力結果(Terminal, REPL)

$ ./sample.pl
a = 1, b = 2
a = 0, b = 2
Cannot modify an immutable Str
  in block <unit> at ./sample.pl line 15

$

ということで、Perl 6 でも三項演算子(注意「? :」 ではなく 「?? !!」)を左辺値にも使えるみたい。

文字列に関しては Perl 5 では mutable(可変性をもっている)なのが immutable(不変性をもつ)に変わったっぽい。サブルーチンの引数で 「is copy」とかあるみたいに、mutable か immutable かを重要視する傾向なのかな。(副作用を意識するような関数型プログラミングの影響だったり?)

0 コメント:

コメントを投稿