1. 導入

1.1. Perl6とは

Perl6は、ハイレベルで汎用の漸進的型付け言語です。 Perl6はマルチパラダイムの言語です。手続型、オブジェクト指向、関数プログラミングをサポートしています。

Perl6のモットー:
  • TIMTOWTDI (「ティムトーディー」と発音する):やり方はひとつではない

  • 簡単なものは簡単なままに、難しいことをより簡単に、不可能なことは・・・難しく

1.2. 用語集

  • Perl6: テストスイート付きの言語仕様。テストスイートをパスする実装はすべてPerl6であるとみなされます。

  • Rakudo: Perl6のコンパイラ

  • Rakudobrew: Rakudo用のインストールマネージャ

  • Panda: Perl6用のモジュールインストーラ

  • Rakudo Star: Rakudo、Panda、Perl6モジュール、ドキュメントなどをまとめたバンドル

1.3. Perl6のインストール

Linux
  1. Rakudobrewをインストール: https://github.com/tadzik/rakudobrew

  2. Rakudoをインストール: 端末で次のコマンドを打ち込む rakudobrew build moar

  3. Pandaのインストール: 端末で次のコマンドを打ち込む rakudobrew build-panda

OSX

Linuxと同じ手順でインストールする
あるいは、
homebrewを使ってインストール: brew install rakudo-star

Windows
  1. http://rakudo.org/downloads/star/から最新版のインストーラ(拡張子が.msiになっているもの)をダウンロードする。
    32ビットシステムの場合には「x86」ファイル、64ビットシステムの場合には「x86_64」ファイルをダウンロードしてください。

  2. インストール後、C:\rakudo\bin にパスを通す

Docker
  1. 正式なDockerイメージを入手する docker pull rakudo-star

  2. イメージを使ってコンテナをrunする docker run -it rakudo-star

1.4. Perl6コードの実行

Perl6コードは、REPL(Read-Eval-Print Loop)を使って実行できます。 まず、端末を開き、perl6 と打ち込み、エンターキーを押します。すると、> というプロンプトが表示されます。次に、コードを一行入力し、エンターキーを押します。すると、REPLがその1行コードの値を表示します。続けて他のコードを打ち込むこともできますし、あるいは exit と打ち、エンターキーを押してREPLを抜けることもできます。

別の方法として、コードをファイルに打ち込んで保存し、それを実行することもできます。Perl6スクリプトには、.pl6 という拡張子を付けることが勧められています。 端末に perl6 filename.pl6 と打ち込み、エンターキーを押すことで、ファイルを実行することができます。REPLと違い、コードの各行の結果が自動的に表示されることはありません。結果を表示するには、コード内に say のように書く必要があります。

REPLが使われるのは、特に1行だけのコードのような、ちょっとしたコードを実行する時です。1行以上のプログラムを書く場合には、ファイルに打ち込んで実行する方が良いでしょう。

1行コードは、コマンドラインで perl6 -e 'your code here' と入力してエンターキーを押すことで、インタラクティブではない方法で実行することもできます。

Rakudo Star に含まれるラインエディタでは、REPLが使えるようになっています。

もし Rakudo Star ではなく、Rakudo だけをインストールした場合には、おそらくラインエディタの機能(上下矢印キーで入力履歴、左右矢印キーで編集、タブで入力補完)が使えるようにはなっていないでしょう。 以下のコマンドでこの機能を導入することができます。

  • panda install Linenoise は、Windows、Linux、OSXで動作するはずです。

  • もしLinuxを使っていて、Readline ライブラリが好みなら、 panda install Readline でもよいでしょう。

1.5. エディタ

ほとんどの場合にPerl6プログラムをファイルに保存するわけですから、Perl6の文法を解釈できるちゃんとしたテキストエディタを使うべきです。

個人的に使っていておすすめなのは、Atom です。Perl6のシンタックスハイライトが最初からついてくるモダンなテキストエディタです。 Perl6-fe もAtom用のPerl6シンタックスハイライトでオリジナル版から派生したものですが、多くのバグ修正と機能追加がされています。

他にも、VimEmacsPadreなどを使う人もいるでしょう。

最近のバージョンのVimには、Perl6のシンタックスハイライトがついてきます。EmacsやPadreでは追加パッケージのインストールが必要になるでしょう。

1.6. Hello World!

それでは、 hello world の儀式から始めましょう。

say 'hello world';

こうも書くことができます:

'hello world'.say;

1.7. 文法概要

Perl6プログラムは自由形式です: 好きなだけホワイトスペースを使ってかまいません(ほとんどの場合は)。

とは、一般的には論理行のコード1行で、最後にセミコロンが必要です: say "Hello" if True;

とは、値を返す特殊な種類の文です: 1+23 を値として返します。

式は 演算子 からできています。

とは:

  • 変数: 操作・変更できる値

  • リテラル: 数や文字列のような定数

演算子 は以下の種類に分けられます:

種類

説明

前置(Prefix)

項の前につく

++1

中置(Infix)

項の間に置く

1+2

後置(Postfix)

項の後ろにつく

1++

接周(Circumfix)

項を囲む

(1)

後置接周(Postcircumfix)

一つの項の後ろについてもう一つの項を囲む

Array[1]

1.7.1. 識別子

識別子とは、項を定義する際につける名前のことです。

規則:
  • アルファベットかアンダースコア(下線)で始まる必要があります。

  • 数字も使えます(ただし、最初の文字以外)。

  • ダッシュ(-)やアポストロフィー(')も使えます(ただし、最初と最後の文字以外)が、ダッシュやアポストロフィーの右にはアルファベットが来る必要があります。

有効

無効

var1

1var

var-one

var-1

var’one

var'1

var1_

var1'

_var

-var

命名規則:
  • キャメルケース: variableNo1

  • ケバブケース: variable-no1

  • スネークケース: variable_no1

識別子に好きな名前を付けることができますが、一つの命名規則に固く従うのが良いでしょう。

意味のある名前を付けて、あなたの(そして他の人の)プログラミングライフを楽なものにしてください。

  • var1 = var2 * var3 は文法的には正しいが、意味がはっきりしない。

  • monthly-salary = daily-rate * working-days のほうがずっとよい。

1.7.2. コメント

コメントとは、コンパイラには無視される、メモとして使われるテキストです。

コメントには3種類あります:

  • 一行コメント

    # これは一行コメントです
  • 埋め込みコメント:

    say #`(これは埋め込みコメントです) "Hello World."
  • 複数行コメント

    =begin comment
    これは複数行コメントです。
    コメント 1
    コメント 2
    =end comment

1.7.3. クオート

文字列はダブルクオートかシングルクオートで囲む必要があります。

次の場合には必ずダブルクオートを使います:

  • 文字列にアポストロフィーが含まれている場合

  • 文字列に含まれる変数を展開したい場合

say 'Hello World';   # Hello World
say "Hello World";   # Hello World
say "Don't";         # Don't
my $name = 'John Doe';
say 'Hello $name';   # Hello $name
say "Hello $name";   # Hello John Doe