スキップしてメイン コンテンツに移動

投稿

2月, 2011の投稿を表示しています

Perl 5 to 6 - スコープ

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 18 - Scopingの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 18 - ScopingSYNOPSISfor 1 .. 10 -> $a { # ここは$aが見える } # ここは$aが見えない while my $b = get_stuff() { # ここは$bが見える } # ここでも$bが見える my $c = 5; { my $c = $c; # ここで$cがundefになる } # ここでは$cは5 my $y; my $x = $y + 2 while $y = calc(); # まだ$xが見える DESCRIPTION字句的スコープPerl6のスコープはPerl5に非常によく似ています。ブロックは新しい字句的スコープを導入します。 変数名は最も内側の字句的スコープから探索され、もし見つからなければ一つ外側のスコープを、といった手順で探索されます。 Perl5と同様にmy変数は完全な字句的スコープ変数であり、our宣言はパッケージ変数に字句的スコープを持った別名を作ります。ただしちょっとした違いがあります: 変数はブロックの宣言された位置より後で可視であり、ブロックのヘッダ(例えばwhileループの条件節など)で宣言された変数はブロック内に限定されません。スコープを限定したいときはブロックの形式的パラメータが使えます:if calc() -> $result { # ここでは$resultが使える } # ここでは$resultが見えない 変数は宣言の直後から可視であり、Perl5の…

Perl 5 to 6 - Unicode

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 17 - Unicodeの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 17 - UnicodeSYNOPSIS(なし) DESCRIPTIONPerl5のUnicodeモデルは大きな弱点に悩んでいました: バイナリとテキストデータに同じ型を使っていたのです。 プログラムがネットワークソケットから512バイト読み込んだとすると、それは当然バイト列になります。しかしそれに対して(Perl5で)ucを呼ぶとテキストとして扱われます。 推奨されている方法は最初にバイト列をデコードすることですが、サブルーチンがそれを引数として受け取る段階では、それがエンコードされているのかどうか、つまりblobとして扱うべきかテキストとして扱うべきか確実に判断することは不可能です。一方、Perl6は単なるバイトのコレクションであるBuf型を提供します。またStrは論理的な文字のコレクションです。論理的な文字という用語にはいささか説明が必要です。正確に言うと、Strは様々な水準の見方ができるオブジェクトです: Byte、CodePoint(Unicodeコンソーシアムが番号を割り当てたものすべて)、Grapheme(書記素; 文字として目に見えるもの)、CharLingua(言語定義文字)。例えば16進数表記で61 cc 80は(当然)3バイトのバイト列を構成します。しかしこれは2つのコードポイントLATIN SMALL LETTER A(U+0041)とCOMBINING GRAVE ACCENT(U+0300)、あるいは1つの書記素(ブログシステムないしあなたのブラウザが文字を殺してなけ…

Perl 5 to 6 - 列挙型

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 16 - Enumsの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 16 - 列挙型SYNOPSISenum bit Bool <False True>; my $value = $arbitrary_value but True; if $value { say "Yes, it's true"; # 表示される } enum Day ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'); if custom_get_date().Day == Day::Sat | Day::Sun { say "Weekend"; } DESCRIPTION列挙型は用途の広い獣です。定数の列挙からなる低レベルのクラスであり、定数は典型的には整数や文字列です(が任意のものが使えます)。これらの定数は派生型やメソッド、あるいは通常の値のようにふるまいます。 but演算子でオブジェクトに結びつけることができ、これによって列挙型を値に「ミックスイン」できます:my $x = $today but Day::Tue; 列挙型の型名を関数のように使うこともでき、引数として値を指定できます:$x = $today but Day($weekday); こうするとオブジェクトは列挙型の名前(ここではDay)をメソッド名として持ちます:say $x.D…

Perl 5 to 6 - ツイジル

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 15 - Twigilsの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 15 - ツイジルSYNOPSISclass Foo { has $.bar; has $!baz; } my @stuff = sort { $^b[1] <=> $^a[1]}, [1, 2], [0, 3], [4, 8]; my $block = { say "This is the named 'foo' parameter: $:foo" }; $block(:foo<bar>); say "This is file $?FILE on line $?LINE" say "A CGI script" if %*ENV.exists('DOCUMENT_ROOT'); DESCRIPTIONいくつかの変数にはツイジルという第2のシジルがあります。これは基本的にはその変数が「普通」ではないということです。違いはいくつかあり、例えばスコープの違いなどです。オブジェクトのパブリックな属性とプライベートな属性がそれぞれ.と!というツイジルを持つことは既に紹介しました; それらは通常の変数ではなくselfに結びつけられています。ツイジル^はPerl5で例外的に扱われていたケースを一般化します。次のように書けます# 注意: Perl5のコードです sort { $a <=> $b } @array $aと$bはstrictプラグマに特別扱いされていま…

Perl 5 to 6 - MAINサブルーチン

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 14 - The MAIN subの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 14 - MAINサブルーチンSYNOPSIS# ファイル doit.pl #!/usr/bin/perl6 sub MAIN($path, :$force, :$recursive, :$home = '~/') { # do stuff here } # コマンドライン $ ./doit.pl --force --home=/home/someoneelse file_to_process DESCRIPTIONサブルーチン呼び出しと典型的なUNIXプログラムのコマンドラインからの起動は、見た目にはとてもよく似ています: 位置的な引数やオプション、名前付き引数を与えられます。この類似点のおかげで、Perl6はコマンドラインを処理してサブルーチン呼び出しに変換してくれます。 スクリプトは通常通り実行され(この時点で@*ARGSに格納されているコマンドライン引数を書き換えることもできます)、その後もし存在すればMAINサブルーチンが呼び出されます。コマンドライン引数がMAINサブルーチンの形式的パラメータにマッチしない場合、自動的に生成されたUsageが表示されます。コマンドラインオプションはサブルーチン引数に以下のようにマップされます:-name :name -name=value :name<value> # <...>はqw(...)のようなものでしたね --hack…

Perl 5 to 6 - カスタム演算子

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 13 - Custom Operatorsの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 13 - カスタム演算子SYNOPSISmulti sub postfix:<!>(Int $x) { my $factorial = 1; $factorial *= $_ for 2..$x; return $factorial; } say 5!; # 120 DESCRIPTION演算子は変わった名前を持ち、優先度とか結合性のような付加的な属性が少しだけ付いた関数です。 Perl6は通常term infix termというパターンに従います。termは前置演算子が前に付いていたり、後置演算子や後置接周(postcircumfix)演算子が後に付いたりしていても構いません。1 + 1 中置 +1 前置 $x++ 後置 <a b c> 接周 @a[1] 後置接周 演算子の名前は「特別な」文字に限らず、空白以外なら何でも使えます。演算子の長い名前はそのタイプの後にコロンとリテラルあるいはシンボルのリストが付きます。 例えばinfix:<+>は1+2で使われている演算子です。 もう一つの例はpostcircumfix:<[ ]>で、これは@a[0]の演算子です。これまで得た知識を使えば、もう新しい演算子を定義できます:mul…

Perl 5 to 6 - 遅延性

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 12 - Lazinessの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 12 - 遅延性SYNOPSISmy @integers = 0..*; for @integers -> $i { say $i; last if $i % 17 == 0; } my @even := map { 2 * $_ }, 0..*; my @stuff := gather { for 0 .. Inf { take 2 ** $_; } } DESCRIPTIONPerlプログラマは怠けがちです。彼らが使うリストも。ここで怠惰という言葉が意味するのは、評価が可能な限り遅延されるということです。 @a := map BLOCK, @bのようなコードを書いたとき、ブロックは一切実行されません。 @aの要素にアクセスしようとしたときだけmapは実際にブロックを実行し、必要とされる分だけ@aを埋めます。代入ではなくバインディングを使っていることに注意して下さい: 配列への代入は先行評価を強制することがあります(コンパイラがリストの無限性に気づかない限り; 無限リスト検出の詳細はまだ固まっていません)。 バインディングはそのようなことがありません。遅延性は無限リストの取り扱いを可能にします: 引数すべてに操作を行うようなことさえしなければ、評価された要素に必要なだけのメモリしか必要としません。しかし落とし穴があります: 長さの取得やソートは遅延性を殺します——無限リストであっても。その場合無限ループになるでしょう。一般にスカラへの変…

Perl 5 to 6 - Perl5の演算子に対する変更

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 11 - Changes to Perl 5 Operatorsの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 11 - Perl5の演算子に対する変更SYNOPSIS# ビット演算子 5 +| 3; # 7 6 +^ 3 # 6 5 +& 3; # 1 "b" ~| "d" # 'f' # 文字列連結 'a' ~ 'b' # 'ab' # ファイルテスト if '/etc/passwd' ~~ :e { say "exists" } # 繰り返し 'a' x 3 # 'aaa' 'a' xx 3 # 'a', 'a', 'a' # 3項演算子 $a == $b ?? 2 * $a !! $b - $a # 連結比較 if 0 <= $angle < 2 * pi { ... } DESCRIPTION数値演算子(+, -, /, *, **, %)はすべて元のままです。|、^、&はジャンクションの生成に使われるので、ビット演算子は構文が変更されました。 それらはデータプレフィクスを伴い、例えば+|は数値コンテキストでのOR、~^は文字列に対する1の補数です。 ビットシフト演算子も同様に変更されま…

Perl 5 to 6 - コンテナと値

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 10 - Containers and Valuesの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 10 - コンテナと値SYNOPSISmy ($x, $y); $x := $y; $y = 4; say $x; # 4 if $x =:= $y { say '$x and $y are different names for the same thing' } DESCRIPTIONPerl6はコンテナと、コンテナに格納できる値を区別して取り扱います。通常のスカラ変数は一種のコンテナで、型制約やアクセス制約(読み取り専用とか)などの属性を持ち、他のコンテナの別名として使えます。値をコンテナに格納することを代入と呼び、コンテナに別名をつけることをバインディングと呼びます。my @a = 1, 2, 3; my Int $x = 4; @a[0] := $x; # @a[0]と$xは同じ変数 @a[0] = 'Foo'; # エラー 「型チェック失敗」 IntやStrのような型は不変、つまりこれらの型のオブジェクトは変更できません。しかしこれらの値を保持する変数(コンテナ)は変更できます:my $a = 1; $a = 2; # 驚くにはあたりません バインディングは::=演算子を使ってコンパイル時に行うこともできます。2つの変数がバインディングされているか調べるには=:=比較演算子を使います。MOTIVATIONサブルーチンや型、変数のエクスポートやインポートは別名定義によって実現…

Perl 5 to 6 - 比較とマッチング

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 09 - Comparing and Matchingの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 09 - 比較とマッチングSYNOPSIS"ab" eq "ab" True "1.0" eq "1" False "a" == "b" True "1" == 1.0 True 1 === 1 True [1, 2] === [1, 2] False $x = [1, 2]; $x === $x True $x eqv $x True [1, 2] eqv [1, 2] True 1.0 eqv 1 False 'abc' ~~ m/a/ True 'abc' ~~ Str True 'abc' ~~ Int False Str ~~ Any True Str ~~ Num False 1 ~~ 0..4 True -3 ~~ 0..4 False DESCRIPTIONPerl…

Perl 5 to 6 - ジャンクション

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 08 - Junctionsの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 08 - ジャンクションSYNOPSISif $x eq 3|4 { say '$x is either 3 or 4' } say ((2|3|4)+7).perl # (9|10|11) DESCRIPTIONジャンクションは順序づけられていない値の重ね合わせです。ジャンクションに対する演算はジャンクションの各要素に対して別々に実行(並列化されるかも知れません)され、その結果は同じ型のジャンクションに組み立てられます。複数あるジャンクション型は真理値コンテキストで評価されたときのみ違いが出ます。型にはany、all、one、noneがあります。型 中置演算子 any | one ^ all & 1 | 2 | 3はany(1..3)と同じです。my Junction $weekday = any <Monday Tuesday Wednesday Thursday Friday Saturday Sunday> if $day eq $weekday { say "See you on $day"; } この例では$dayと'Monday'、$dayと'Tuesday'などといった各ペアに対してeq演算子が呼び出され、その結果は再びanyジャンクションに格納されます。結果が確定する…

Perl 5 to 6 - 正規表現(またの名をルール)

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 07 - Regexes (also called "rules")の日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 07 - 正規表現(またの名をルール)SYNOPSISgrammar URL { token TOP { <schema> '://' [<ip> | <hostname> ] [ ':' <port>]? '/' <path>? } token byte { (\d**{1..3}) <?{ $0 < 256 }> } token ip { <byte> [\. <byte> ] ** 3 } token schema { \w+ } token hostname { (\w+) ( \. \w+ )* } token port { \d+ } token path { <[ a..z A..Z 0..9 \-_.!~*'():@&=+$,/ ]>+ } } my $match = URL.parse('http://perl6.org/documentation/')…

Perl 5 to 6 - コンテキスト

2011-02-27: コメント欄で既に改訂された仕様の指摘がありましたので一部補足しました。id:uasiに感謝します。これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 06 - Contextsの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 06 - コンテキストSYNOPSISmy @a = <a b c> my $x = @a; say $x[2]; # c say (~2).WHAT # Str() say +@a; # 3 if @a < 10 { say "short array"; } DESCRIPTION次のように書いたとき、$x = @a Perl5では$xは@aより少ない情報——@aの要素数だけ——しか持ちません。 すべての情報を保存しておくためには明示的にリファレンスを取る必要があります: $x = \@aPerl6ではこれらは反対になります: デフォルトでは何も失うことなく、スカラ変数は配列を単に格納します。 これは一般要素コンテキスト(Perl5でscalarと呼ばれていたもの)及びより特化された数値、整数、文字列コンテキストの導入によって可能となりました。無効コンテキストとリストコンテキストは変更されていません。特別な構文でコンテキストを強制できます。構文 コンテキスト ~stuff 文字列 ?stuff 真理値 +stuff 数値 -stuff 数値 (符号を変える効果もある) $( stuff ) 一般要素コンテキスト @…

Perl 5 to 6 - オブジェクトとクラス

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 05 - Objects and Classesの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 05 - オブジェクトとクラスSYNOPSISclass Shape { method area { ... } # リテラル '...' has $.colour is rw; } class Rectangle is Shape { has $.width; has $.height; method area { $!width * $!height; } } my $x = Rectangle.new( width => 30.0, height => 20.0, colour => 'black', ); say $x.area; # 600 say $x.colour; # black $x.colour = 'blue'; DESCRIPTIONPerl6にはPerl5よりずっと洗練されたオブジェクトモデルがあります。クラス、ロール、アトリビュートやメソッドのためのキーワードがあり、カプセル化されたプライベートなアトリビュートやメソッドがあります。 これは(Perl6のオブジェクトシステムに影響を受けた)Perl5のMooseモジュールにとてもよく似ています。クラスを宣言する方法は2通りあります。cla…

Perl 5 to 6 - サブルーチンとシグネチャ

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 04 - Subroutines and Signaturesの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 04 - サブルーチンとシグネチャSYNOPSIS# シグネチャなしのサブルーチン——Perl5風 sub print_arguments { say "Arguments:"; for @_ { say "\t$_"; } } # 固定引数の型指定付きシグネチャ sub distance(Int $x1, Int $y1, Int $x2, Int $y2) { return sqrt ($x2-$x1)**2 + ($y2-$y1)**2; } say distance(3, 5, 0, 1); # デフォルト引数 sub logarithm($num, $base = 2.7183) { return log($num) / log($base) } say logarithm(4); # 第2引数はデフォルトを利用 say logarithm(4, 2); # 明示的な第2引数 # 名前付き引数 sub doit(:$when, :$what) { say "doing $what at $when"; } doit(what => 'stuff', when => 'once'); # 'doing stuff at once' doit(…

Perl 5 to 6 - 基本制御構造

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 03 - Basic Control Structuresの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 03 - 基本制御構造SYNOPSISif $percent > 100 { say "weird mathematics"; } for 1..3 { # $_をループ変数として使う say 2 * $_; } for 1..3 -> $x { # 明示的なループ変数を使う say 2 * $x; } while $stuff.is_wrong { $stuff.try_to_make_right; } die "Access denied" unless $password eq "Secret"; DESCRIPTIONほとんどのPerl5の制御構造はPerl 6でもよく似ています。 一番大きな見た目の変化はif、while、forなどの後にカッコが必要なくなったことです。正確には、条件をカッコで囲むのは非推奨です。分岐ifはほとんど変わっていません。相変わらずelsifやelseの節を付けることができます。 unlessもありますが、else節を付けることができなくなりました。if $sheep == 0 { say "How boring"; } elsif $sheep == 1 { say "One lonely sheep"; } else { say &qu…

Perl 5 to 6 - 型

2011-02-27: コメント欄で既に改訂された仕様の指摘がありましたので一部補足しました。id:uasiに感謝します。これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 02 - Typesの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 02 - 型SYNOPSISmy Int $x = 3; $x = "foo"; # エラー say $x.WHAT; # 'Int()' # 型チェック: if $x ~~ Int { say '$x contains an Int' } DESCRIPTIONPerl6には型があります。すべてが何らかの形のオブジェクトであり、型を持ちます。変数は型制約を持つことができますが、必須ではありません。知っておくべきいくつかの基本的な型があります:'a string' # Str 2 # Int 3.14 # Rat (有理数) (1, 2, 3) # Seq 「通常の」組み込み型はすべて大文字で始まります。「通常の」型はすべてAnyを継承し、他も含めたすべての型はObjectMu(コメントで指摘があったので修正しました。多謝。ちなみに「無」から来ているそうです)を継承します。型名を変数宣言に加えることで、変数が保持できる値の型に制約をつけられます。my Numeric $x = 3.4; my Int @a = 1, 2, 3; 「間違った」型(与えられた型でもその派生型でもない型)の値を変数に代入しよう…

Perl 5 to 6 - 文字列、配列、ハッシュ

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 01 - Strings, Arrays, Hashes;の日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" Lesson 01 - 文字列、配列、ハッシュSYNOPSISmy $five = 5; print "an interpolating string, just like in perl $five\n"; say 'say() adds a newline to the output, just like in perl 5.10'; my @array = 1, 2, 3, 'foo'; my $sum = @array[0] + @array[1]; if $sum > @array[2] { say "not executed"; } my $number_of_elems = @array.elems; # or +@array my $last_item = @array[*-1]; my %hash = foo => 1, bar => 2, baz => 3; say %hash{'bar'}; # 2 say %hash<bar>; # 自動クォートを使った例 # これはエラーになる: %hash{bar} # (宣言されていないサブルーチンbar()を呼び出そうとする) DESCRIPTIONPerl6はPerl5と良く似…

Perl 5 to 6 - イントロダクション

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" - Introductionの日本語訳です。原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。Original text: Copyright© 2008-2010 Moritz LenzJapanese translation: Copyright© 2011 SATOH KoichiNAME"Perl 5 to 6" - イントロダクションSYNOPSISPerl6を学ぶ (もし既にPerl5を知っているなら) Perl6の愛で方を学ぶ 理由を知る DESCRIPTIONPerl6は十分にドキュメント化されていません。(仕様書を別にすれば)コンパイラを書くことの方がユーザ向けのドキュメントを用意することより急を要すると思われていることを鑑みれば、これは驚くべきことではありません。残念なことですが、つまりこれはPerl6を学ぶことが容易とは言えないということで、仕様書やらIRCやらテストスイートからPerl6を学ぼうとする動機を見つけるくらいの強い関心がないと駄目だということです。筆者が"Perl 5 to 6"(良い名前がない)と呼ぶことにしたこのプロジェクトは、短い記事の連載でこのギャップを埋めることを目的にしています。それぞれのレッスンはかなりテーマを絞り、短い例を使って2、3の最も重要な点を説明しようと思います。また、何故Perl5と6で物事が変わったのか、何故それが重要なのかも説明します。レッスンを読めば、Synopsis(Perl6の英知すべての規範的なソースです)を基本的に理解するのに十分な知識が得られるようにしたいと思います。読み易さを維持するために、各レッスンは200行ないし1000語(訳注:原文基準)を越えないものとします(ただしこれは緩い制限です)。恐らくレッスンはプログラミング言語を学ぶには短過ぎるでしょうが、言語設計の輪郭を描き出し、言語を学ばずともその美しさが感じられるようにしたいと思い…