Perlテックブログ

ITエンジニアの成長意欲を刺激する技術考察、モジュール開発の日記。Perlイベントや国内や海外のPerlの記事の紹介。

文字列を簡単に出力する機能 - SPVM開発日記

昨日、型セマンティクスがすべて確定して実際に実装するところまで書けた。

  • 数値型
  • 汎用オブジェクト型
  • クラス型
  • 配列型
  • インターフェース型
  • 値型-
  • リファレンス型

の「代入」「自動型変換」「実行時型変換」「実行時型チェック」を矛盾なく実装した(つもり)。

ちなみにジェネリクスは実装予定はない。

文字列連結演算子を使う場合の、文字列型への自動変換

さて次は、いろいろと試していると、どうも数値の出力がたくさんでてくる。出力するのが、意外に面倒だ。

my $num = 4;
print("Number is " . (string)$num . "\n");

みたいな。

SPVMには文字列型はなくstringは「const byte[]」のエイリアスになっている。つまり、型の情報だけでは、バイト配列なのか文字列型なのかの判定ができない。

でも、チョトマテ、チョトマテ、よく考えると、Perlには、文字列連結演算子があるじゃないか!!!

そうすると文字列連結演算子の左右に来るものについては、文字列コンテキストと考えることができる。

文字列コンテキストに置かれた数値については、文字列に自動変換するという処理を入れることができる。

よくある言語のように「+」演算子であれば、左辺にあるオブジェクトの型に基づいて「+」の意味を決めるけれど、Perlには「.」演算子があるから、コンテキストによって、「.」の左右の意味を決定できる。

これって、意外といい!!!

すると上のコードは、次のように書けるんじゃないか。

my $num = 4;
print("Number is " . $num . "\n");

変数展開

さて、加えて、Perlには変数展開がある。変数展開が実装できると、さらに短くできる。

my $num = 4;
print("Number is $num\n");

今日はこれを実装してみるぞい。