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


Perl 6ではメソッド呼び出しがドット(.)になりました。
Perl 5ではドットは文字列結合だったんだけど、これがなんと、チルダ(~)になりました。
既存の変数の末尾に文字列を追加する.=演算子は~=になりました。
じゃあ.=演算子は何になったのかというと、メソッド呼び出しの結果で変数を置き換える演算子になりました。文字列から離れますが。。
だそうです。へぇー。
繰り返しの演算子はxのままです。
ちなみにどんな数字列でも3回繰り返すと3で割り切れます。
関数は、indexもsubstrも同じですが、両方ともメソッド呼びができます。
「おじさん」という言葉の3文字目以降(「さん」)が、「いちにんさん」という言葉の何文字目に現れるか。関数指向の書き方は
ですが、メソッド指向では
となります。
また、二重引用符の中に{式}を書くと、式の値で置き換えられます。。
#! /usr/bin/env perl6
# str.p6 -- Perl 6で文字列処理
"Hello world".say;
# str.p6 -- Perl 6で文字列処理
"Hello world".say;
[sample]$ ./str.p6
I say Hello world
I say Hello world
Perl 5ではドットは文字列結合だったんだけど、これがなんと、チルダ(~)になりました。
#! /usr/bin/env perl6
# str2.p6 -- Perl 6で文字列処理
my $str1 = "Hello";
my $str2 = "World";
($str1 ~ $str2).say;
# str2.p6 -- Perl 6で文字列処理
my $str1 = "Hello";
my $str2 = "World";
($str1 ~ $str2).say;
[sample]$ ./str2.p6
HelloWorld
HelloWorld
既存の変数の末尾に文字列を追加する.=演算子は~=になりました。
#! /usr/bin/env perl6
# str3.p6 -- Perl 6で文字列処理
my $str1 = "What a beautiful";
$str1 ~= "World";
$str1.say;
# str3.p6 -- Perl 6で文字列処理
my $str1 = "What a beautiful";
$str1 ~= "World";
$str1.say;
[sample]$ ./str3.p6
What a beautifulWorld
What a beautifulWorld
じゃあ.=演算子は何になったのかというと、メソッド呼び出しの結果で変数を置き換える演算子になりました。文字列から離れますが。。
#! /usr/bin/env perl6
# num.p6 -- Perl 6で数字の処理
my $num = 2;
$num .= sqrt; # $num = $num.sqrtと同じこと
$num.say;
# num.p6 -- Perl 6で数字の処理
my $num = 2;
$num .= sqrt; # $num = $num.sqrtと同じこと
$num.say;
[sample]$ ./num.p6
1.4142135623731
1.4142135623731
だそうです。へぇー。
繰り返しの演算子はxのままです。
#! /usr/bin/env perl6
# num2.p6 -- Perl 6で数字の処理
my $num = 2 x 3;
$num.say;
$num /= 3;
$num.say;
# num2.p6 -- Perl 6で数字の処理
my $num = 2 x 3;
$num.say;
$num /= 3;
$num.say;
[sample]$ ./num2.p6
222
74
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));
# str4.p6 -- Perl 6で文字列処理
my $str1 = "おじさん";
my $str2 = "いちにいさん";
say index($str2, substr($str1, 2));
[sample]$ ./str4.p6
4
4
ですが、メソッド指向では
#! /usr/bin/env perl6
# str5.p6 -- Perl 6で文字列処理
my $str1 = "おじさん";
my $str2 = "いちにいさん";
say $str2.index($str1.substr(2));
# str5.p6 -- Perl 6で文字列処理
my $str1 = "おじさん";
my $str2 = "いちにいさん";
say $str2.index($str1.substr(2));
[sample]$ ./str5.p6
4
4
となります。
また、二重引用符の中に{式}を書くと、式の値で置き換えられます。。
#! /usr/bin/env perl6
# str6.p6 -- Perl 6で文字列処理
"2 x 3 = {2 x 3} and 2 * 3 = {2 * 3}".say;
# 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
今日はこんなところで。
2 x 3 = 222 and 2 * 3 = 6