Opus 16の続き。いちおう『かんたんPerl』の順番に沿って研究しているので、今日は文字列について研究します。

Dulcimer Strings (photo by Garry Knight)
 Perl 6ではメソッド呼び出しがドット(.)になりました。

#! /usr/bin/env perl6
# str.p6 -- Perl 6で文字列処理

"Hello world".say;

[sample]$ ./str.p6
I say Hello world

 Perl 5ではドットは文字列結合だったんだけど、これがなんと、チルダ(~)になりました。

#! /usr/bin/env perl6
# str2.p6 -- Perl 6で文字列処理

my $str1 = "Hello";
my $str2 = "World";

($str1 ~ $str2).say;

[sample]$ ./str2.p6
HelloWorld

 既存の変数の末尾に文字列を追加する.=演算子は~=になりました。

#! /usr/bin/env perl6
# str3.p6 -- Perl 6で文字列処理

my $str1 = "What a beautiful";
$str1 ~= "World";

$str1.say;

[sample]$ ./str3.p6
What a beautifulWorld

 じゃあ.=演算子は何になったのかというと、メソッド呼び出しの結果で変数を置き換える演算子になりました。文字列から離れますが。。

#! /usr/bin/env perl6
# num.p6 -- Perl 6で数字の処理

my $num = 2;
$num .= sqrt; # $num = $num.sqrtと同じこと

$num.say;

[sample]$ ./num.p6
1.4142135623731

だそうです。へぇー。

 繰り返しの演算子はxのままです。

#! /usr/bin/env perl6
# num2.p6 -- Perl 6で数字の処理

my $num = 2 x 3;
$num.say;

$num /= 3;

$num.say;

[sample]$ ./num2.p6
222
74

 ちなみにどんな数字列でも3回繰り返すと3で割り切れます。

 関数は、indexもsubstrも同じですが、両方ともメソッド呼びができます。
 「おじさん」という言葉の3文字目以降(「さん」)が、「いちにんさん」という言葉の何文字目に現れるか。関数指向の書き方は


#! /usr/bin/env perl6
# str4.p6 -- Perl 6で文字列処理

my $str1 = "おじさん";
my $str2 = "いちにいさん";

say index($str2, substr($str1, 2));

[sample]$ ./str4.p6
4

ですが、メソッド指向では

#! /usr/bin/env perl6
# str5.p6 -- Perl 6で文字列処理

my $str1 = "おじさん";
my $str2 = "いちにいさん";

say $str2.index($str1.substr(2));

[sample]$ ./str5.p6
4

となります。

 また、二重引用符の中に{式}を書くと、式の値で置き換えられます。。


#! /usr/bin/env perl6
# str6.p6 -- Perl 6で文字列処理

"2 x 3 = {2 x 3} and 2 * 3 = {2 * 3}".say;

[sample]$ ./str6.p6
2 x 3 = 222 and 2 * 3 = 6

 今日はこんなところで。