Perl 6 の Sigil と特殊変数
はじめに
この記事は、 Perl6 Advent Calendar 2011 (日本版)の18日目の記事です。
以下で説明するもののうちのいくつかは、環境によってはまだ動かない(未実装)こともあります。
twigil
twigil は2つの記号( sigil )を用いた表記です。クラスのフィールドのアクセシビリティは twigil によって設定できます。
$!private # 2つ目がエクスクラメンションの変数はクラス内からのみアクセスできる $.public # 2つ目がドットの変数はクラスの外からでも参照できる(入力はできない) $.public is rw # クラスの外から入力したい場合は is で writable 指定を行う
$^ と $: は引数として使えます。 $^ は変数名の並び順(辞書順)に、 $: は変数名指定で扱えます。
sub name { $:b ~ ',' ~ $:c ',' ~$:a; } sub dict { $^a ~ ',' ~ $^c ~ ',' $^:b; } say name(:c('az'), :b('AZ'), :a('09')); # AZ,az,09 say dict(1, 2, 3); # 1,3,2
$? はコンパイル時に値が確定する変数です。たとえば $?FILE でファイル名が、 $?LINE で行番号が取得できます。$= は POD の内容を取得できます。
最後に、動的かつグローバルな変数を表す twigil として $* があります。基本的なものをいくつかあげると、
@*ARGS | コマンドライン引数 |
$*IN | 標準入力 |
$*OUT | 標準出力 |
$*ERR | 標準エラー出力 |
@*INC | モジュールのパス一覧 |
などがあります。
特殊変数
先にいくつか出ていますが、代表的な特殊変数について、 Perl との 違いをリストアップします。
Perl | Perl6 |
---|---|
STDIN | $*IN |
STDOUT | $*OUT |
STDERR | $*ERR |
$_ | $_ |
$_[1], $_[2] ... | $^a, $^b ... |
$& | $<> |
@ARGV | @*ARGS |
@INC | @*INC |
他にもたくさんありますので、必要に応じて Synopsis 28 をご覧ください。
余談
先のリンク先を見てて思いましたが、コードゴルフで有効だった特殊変数のいくつかが長くなりすぎちゃって使えなくなってますね。