タイトル

Synopsis 5:正規表現とルール

著者

Damian Conway <damian@conway.org>
Allison Randal <al@shadowed.net>
Patrick Michaud <pmichaud@pobox.com>
Larry Wall <larry@wall.org>
Moritz Lenz <moritz@faui2k3.org>
 

機種

Created: 24 Jun 2002

Last Modified: 25 Sep 2011
Version: 149
 

このドキュメントは Apocalypse 5を要約する、そしてそれは新しい正規表現構文についてだ。 それらが長い間(今まで)正規表現じゃなかったから、我々は今「正規表現」よりむしろそれら正規表現を呼び出そうとする、そして我々が正確な意味で、専門的な項になることについて、人気が高い項「正規表現」がプロセスでだと思うの : 「あなたがまあ正規表現のように、マッチしているパターンをする何か」。 他方、デザイン変更の目的の1つが我々のパターンの部分を伝統的な正規表現とパーサー意味規則の下で分析にいっそう受けることが出来させることだ、そしてそれはそれの間に我々のパターンの一部と文法は宣言部分、そしてどの部分かとして手続き上であるとして扱われることである注意深い特質を作ることを必然的に必要とする。

何ででもケースに入れろ、文法の中で再帰的パターンを参照するとき、項規則トークンは一般に正規表現より好まれる。

概観

本質的に、 Perl 6 はネイティブで正規表現表記法の拡張としての Parsing Expression Grammars (PEGs)を実装する。 PEGs はあなたがあいまいな解析結果に「序列」を提供することを要求する。 Perl 6 の序列はテストを結びつき - 壊しているマルチレベルによって決定される:

1) Longest token matching: food\s+ beats foo by 2 or more positions
2) Longest literal prefix: food\w* beats foo\w* by 1 position
3) Declaration from most-derived grammar beats less-derived
4) Within a given compilation unit, earlier declaration wins
5) Declaration with least number of 'uses' wins
 

文法がもう1つのコンパイル単位から猿によってパッチを当てられたときだけ、タイブレーク # 5が起こることができることに注意を払え。 # 3のように、それは遠いものよりも局所宣言を優遇する。

この序列のほかに、もし何かが下に選択されて裁決するなら、ついばむことはバックトラックする、次の最も良い統治は選択される。 すなわち、序列は候補者リストを決定して;ただ1人の候補者が選ばれるからといって残りが離れてスローされることを意味しない。 それらが、しかしながら、明示的に(時々あなたがいくらをカットすることを望むかに依存して「カットされた」演算子、しかし Perl6 がそれらのいく人かを持っている、と呼ばれる)適切なバックトラックしているコントロールによって離れてスローされるかもしれない。

新しいマッチ結果とキャプチャ変数

原因となっているマッチオブジェクトは今利用可能であるとして$/ 暗黙のうちにレキシカルスコープなである変数。 それがそれのように見えないときでさえ、最も最近のマッチへのすべてのユーザアクセスがこの変数を通してだ。 個別のキャプチャ変数(そんなものけれども$0$1など)ただ要素であrno$/.

ところで、 Perl 5 、変数が今始まるナンバーが付けられたキャプチャの場合と異なり$0 代わりに$1.  下を見ろ。

変化していない構文的な特徴

次の正規表現特徴は Perl 5 にと同じ構文を使う:

構文である間にの| 変化しない、デフォルト意味規則は少し変更をする。 我々が両方とものベストを持っていることができるように、我々は宣言部分の楽しい混合と手続き上のマッチングを仕組もうと試みている。 要するに、 Perl があなたのためのものを書くであろうから、あなたは文法のためにあなた自身の tokener を書く必要がない。 「マッチしている Longest - トークン」で下のセクションを見ろ。

パターンの単純化された語彙のパージング

伝統的な正規表現と異なり、 Perl 6 はあなたにメタキャラクタの任意のリストを記憶するように要求しない。 その代わりにそれは単純な規則によって文字を分類する。 そのベース文字がいずれか、アンダースコア、であるすべてのグリフ(書記素)(_)あるいは正規表現で(すなわち英字)あるいは「N」(すなわち数)がそうである「L」から始まる Unicode 分類を常にリテラルであるようにする(すなわち self - 似合うこと). それらがエスケープされなくちゃならない\ (欧数字をシングルにするどの訴訟がそれ自身メタ構文であるかについて、すぐに欧数字ではないの後に続く何以外でも)それらをメタ構文にするために。

- 空白文字を含めて - 他のすべてのグリフは正確に反対:それらが(すなわち非 self - マッチして)常にメタ構文であると見なされるということであって、そしてエスケープされるか、あるいはそれらをリテラルにするために引用されなくちゃならない。 伝統的であるように、それらが個々にエスケープされるかもしれない\しかしそれらが同じく引用されるかもしれない Perl 6 に続く.

1つ以上のいずれかの型のグリフ(まったくすなわちどんなグリフでも)の連続が、一つのクォートの中にそれらを置くことによって、リテラルにされるかもしれない。 (二重のクォートが、正規表現がレキシカルに埋め込みである現在の言語と同じ補間された意味規則で、同じく許される。) クォートが間、それほど、量化可能なアトムを創造する

moose*
 

ただ「e」だけを数量化して、そして、言って、「【ムース】」とマッチする

'moose'*
 

文字列全体を数量化する、そして「moosemoose」とマッチするだろう。

ここに特質を要約するテーブルがある:

             Alphanumerics        Non-alphanumerics         Mixed

 Literal glyphs   a    1    _        \*  \$  \.   \\   \'       K\-9\!
 Metasyntax      \a   \1   \_         *   $   .    \    '      \K-\9!
 Quoted glyphs   'a'  '1'  '_'       '*' '$' '.' '\\' '\''     'K-9!'
 

言い換えれば、識別子グリフはリテラルだ(あるいはエスケープされるとき、メタ構文だ)、非識別子のグリフはメタ構文だ(あるいはエスケープされるとき、リテラルだ)、そして一つのクォートがそれらの中のすべてをリテラルにする。

しかしながら、すべての非識別子のグリフが Perl 6 正規表現でメタ構文として現在有意義であるわけじゃないとは注意しろ(例えば。 \1 \_ - !). すべての unescapedな非識別子のグリフが可能性があるメタ構文で、そして未来の使用に対して遠慮がちだと言うことはいっそう正確だ。 もしあなたがこのようなシーケンスを使う、あなたがクォートにあるいは必要とするエラーが指し示して表示される助けになるコンパイル時がシーケンスを使うなら、あるいはそれを認識するために新しい演算子を定義しろ。

セミコロン文字は有意義でないメタキャラクタとして特に遠慮がちだ;もし unquotedなセミコロンが見られるなら、コンパイラは正規表現がそのターミネータがいないのを淋しく思っていると不平を言うだろう。

変換機

Allowed 修飾子

若干の修飾子がそれらのすべて以外のすべての修飾子が存在することができるわけじゃない可能な場所で許される。

一般に、コンパイルに影響を与える修飾子が正規表現の(好む:i)コンパイル時間に知られているければならな. ただ呼び出している(人たち・もの)だけに影響を与える修飾子がそれ自身正規表現ではなく、行動で(eg 。 :pos:overlap:x(4))ただ呼び出しを巻き込むだけである構造に現われるかもしれない(好むm// そしてs///)、そして上にではなくrx//.  最終的に重なり合うことは、修正に影響を与える副詞である間に、置換に拒否される(eg . :samecase)ただ置換に入ることを許される.

次のことの原理結果が支配するこれら:

変えられたメタキャラクタ

新しいメタキャラクタ

括弧正当化

Variable (非 -)書き入れ

拡張可能なメタ構文(<...>

両方とも< そして> メタキャラクタであって、そして通常(しかし常にではなく)整合ペアで使われる。 (独立型のトークンとこれらとしての若干のメタキャラクタ関数の組み合わせが角を含むかもしれない。 これらは下に記述される。) たいていのアサーションが宣言部分だと見なされる;手続き上のアサーションは例外として記録されるだろう。

なぜなら整合ペア、後で最初の文字< 決定、アサーションの性質:

次のトークンは角を含む、しかしバランスをとるように要求されない:

前もって定められたサブルール

これらはどんな文法あるいは正規表現のためにでも前もって定められたサブルールだ:

* ident

識別子とマッチする。

* 上限値

一つの大文字文字とマッチする。

* 減れ

一つの小文字文字とマッチする。

* アルファ

一つのアルファベット文字とマッチする。

* 数値

一つの数値とマッチする。

* xdigit

一つの16進法の数値とマッチする。

* 印刷

一つのプリント可能な文字とマッチする。

* グラフ

一つの「写実的な」文字とマッチする。

* cntrl

一つの「コントロール」文字とマッチする。 コントロール文字は通常実際のアウトプットを産み出さない(の・もの・人)だ、しかしその代わりにどうにかして最終の(人たち・もの):例えば改行とバックスペースがそうであるコントロールが文字をコントロールする。 127(DEL)の ord () 値と一緒の文字であるように、 ord () 32以下を持っている文字が通常分類されているすべては(ASCII 、 ISO Latin 文字セットと Unicode を想定している)文字をコントロールする。

* punct

一つの句読点文字とマッチする。

* alnum

一つの英数字の文字とマッチする。 これは < + アルファ + 数値 > と等しい。

* wb

ワード境界において真のゼロ幅マッチを返す。 ワード境界が、文字列の始まりと終わりをマッチしている「\W」として勘定に入れて、他の側に(いずれかのオーダーで)片側と「\W」の「\w」を持っているスポットだ。

* ww

2単語文字(ゼロ幅マッチ)の間にマッチする。

* ws

2単語文字の間の必要とされる空白文字、違っているオプションの空白文字とマッチする。 これは乱暴に同等であるそうすること<!ww> \s*ws 使うように要求されないww サブルール).

* スペース

一つの空白文字文字とマッチする(同じけれども \s ).

* 空白

一つの「ブランク」文字とマッチする - たいていのロケールで、これはスペースとタブに対応する。

* 前にpattern

先読みを行なえ - すなわち、もし我々がどこ(で・に)ポジションにいるなら、調べろpattern マッチする。 ゼロ幅を返すMatch 成功の上のオブジェクト。

* 後でpattern

後読みを行なえ - すなわち、現在の位置の前の文字列が(終わりに固定された) <パターン>とマッチするかどうか調べろ。 ゼロ幅を返すMatch 成功の上のオブジェクト。

* <?>

マッチ空の文字列が、すなわち、常に真に戻る

* < !>

<?> の Inverse が、すなわち、常に偽に戻る。

改革をバックスラッシュしろ

正規表現がただ文字列であるよりむしろ、一流の言語を構成する

バックトラックしている制御

宣言部分よりむしろ手続き上であると見なされるパターンのそれらの部分の中で、あなたはバックトラックしている振る舞いをコントロールしてもよい。

正規表現 Routine 、名指された、そして匿名の

何も非合法じゃない

最も長いトークンがマッチしている

世俗的な交代を表す代わりに、| 今が宣言部分の最も長いトークンの意味規則で論理的な交代を表す。 (あなたは今使ってもよい|| 古い世俗的な交代を示すために。 すなわち、| そして|| 今仕事が正規表現構文の中でほとんど同じようにそれらとして正規表現の外でそれらが junctional とショート OR を表す構文をする。 これは事実を含むそれ| もっときつい優先を持つより||.)

歴史的に正規表現処理がバックトラックしている NFA アルゴリズムとしての Perl に進んだ。 これは非常に強力だ、しかし多くのパーサーが、少なくとも最高1ポイント、次々によりむしろ並列にルールを処理することによって、いっそう効率的に機能する。 もしあなたが yacc 文法のように何かを見るなら、あなたはパターンがあるところが見なした多くのパターン / 行動宣言が平行していることを見いだす、そして最終的に文法はどの動きを発するべきか決める。 解析をすることについてのデフォルト Perl ビューが(多分演算子優先を扱うボトムアップの「真ん中のレイヤ」で)本質的にトップダウンである間に、もし少なくともトークン処理が決定論的に進むなら、ユーザー理解のために極めて有用だ。 それで正規表現のマッチしている目的で我々は可能性がある副作用あるいは self - 参照なしでトークンパターンをマッチされることができるそれらのパターンと定義する。 (空白文字がライン移行においてしばしば副作用を持つから、それは通常、少しの先読みほどのプラスマイナスはあるとしても、このようなパターンから除外される。) 基本的に、 Perl は、あなたがあなた自身1(人・つ)を書かなければならないということなしで、自動的に文法からレクサーを得る。

それを目指して、 Perl 6 のすべての正規表現がその「純粋な」パターンをその行動から区別して、そして最初のトークンパターンのそのリストを返すことが可能であるように要求される(過渡的にではないが許した self 参照を伝統的な正規表現に巻き込むであろう1度、それ以来よりさらにサブルールで、何でも含めてではなく、その正規表現の「純粋な」地域によって呼び出されたどんなサブルールのトークンパターンでも含めて)。 論理的な交代使用方法| それからこれらのリストとディスパッチの2かそれ以上を最も長いトークン接頭辞とマッチする代替物に持って行く。 これは最初にレキシカルに来る代替物であるかもしれない、あるいはそうしないかもしれない。

しかしながら、もし2つの代替物が同じ長さでマッチするなら、タイは特定性によって最初に破られる。 最も長い固定されている文字列が勝つ;すなわち、正確なマッチが文字を使って作られたマッチより閉じとして勘定に入れる前方一致が分類する代替物。 もしそれがうまくいかないなら、2つのメソッドの1つによって破られたタイ。 もし代替物が異なった文法であるなら、標準的な MRO (メソッド選択オーダー)は最初にどれを試みるべきか決定する。 もし代替物が同じ文法ファイルにあるなら、逐語的により以前の代替物は優先をとる。 (もし文法のルールであるならで1以上のファイルで定義されている、オーダーは未定義だ、そして明示的なアサーションが、もし間違った(の・もの・人)が最初に試みられるなら、失敗を強制するために使われなくちゃならない。)

この最も長いトークン接頭辞はレクサーを使う他のパージングシステムで乱暴に「トークン」の概念に対応する、しかし Perl のケースではこれは主として自動的に文法鮮明度から生じる epiphenomenon だ。 しかしながら、自動的に計算されていたにもかかわらず、トークンのセットはユーザーによって変更されることができる; 正規表現の中の種々の構造が宣言して教える、それがそうである文法エンジンはパターン部分そして、ユーザーが何がトークンだと見なされるか、そして何のではないかをコントロールするほど、このような構造を差し込むことによって、副作用を始めることを終わらせた。 トークン宣言を終えて、そしてパターンの「行動」部分を始めるとみなされた構造は次のものを含む:

Subpatterns (キャプチャ)は特にトークンパターンを終えない、しかしトークンの再解析結果が subpatterns の場所を見いだすことを必要とするかもしれない。 同じく、最も長いトークンが決定された後、アサーションがチェックされる必要があるかもしれない。 (代わる代わる、もし DFA 意味規則が、 Thompson NFA によってのような、種々の方法の何かで仮想であるなら、 backchecks なしでいつアサーションを発するべきか知ることは可能であるかもしれない。)

貪欲な限定記号と文字クラスがトークンパターンを終了させない。 ワード境界のようなゼロ幅アサーションは同じく問題がない。

このようなアサーションがトークンの一部であり得るから、レクサーエンジンはこのようなアサーションの失敗から回復して、そして同じ長さ、あるいはもっと背が低いかもしれない、しかし決して現在の候補者より長くあり得ない次の最も良いトークン候補者にバックトラックすることができなければならない。

肯定的な先読みアサーションで始まるパターンのために、アサーションは次のパターンよりいっそう特定であると考えられる、それで先読みのパターンは最も長いトークンとして取り扱われる; 最も長いトークンの照合回路は何でもそれがマッチ続ける先読みいつ(そしてもし)によってくまなく渡り歩かれてテキストメッセージを送る再試合に十分にスマートだろう。

奇妙に十分、token トークンパターンが通常空白文字についてマッチして多くをしない限りにおいて以外、キーワードが特にトークンの範囲を決定しない。 それと対照的に、rule キーワード(それ想定する:sigspace)最初の空白文字にそれ自身を不適格とする傾向があるパターンを定義する. それでパターンが来ることになるであろうトークンの大部分token 宣言。 インスタンス、トークン宣言のためにそんなものけれども

token list_composer { \[ <expr> \] }
 

その「最も長いトークン」がただ左大括弧であると見なす、なぜなら最初のものexpr ドが横断オプション空白文字である意志を抑制しろ。 これの例外として、そして読みやすさを促進するために、特別な例外がルールの中に交代のために作られる。 もし規則、あるいは何での変化でもならどこ(で・に)他のコンテキスト:sigspace 活発であって、交代のグループの前に空白文字を持っている、それで代替物の上の先行する空白文字がそうである何でも無視される。 すなわち、rule { [ a | b ] } それがそうであるかのように、扱われるrule { [a |b ] }そして LTM マッチで始まる最初非 sigspace アトム。

最初のトークン照合回路は大文字と小文字の区別(あるいは他のいかなるも標準化プリミティブ)を考慮に入れて、そして、同じ標準化を持っていないルールまで普及させられるときでさえ、正しいことをしなくちゃならない。 すなわち、それらがそうしなくちゃならない、セットを表すべき続けるがそれとマッチする、より低い規則はマッチするだろう。

|| 形式が意味規則と意志が試みない古いショートを持つ、から、すべての可能性じゃないなら、その右側とマッチする(すべてを含めて| 可能性)左に疲れ切った. 最初|| 正規表現で左手のトークンパターンを外の最も長いトークンの照合回路に提供するが、マッチしている最も長いトークンからのどんな次のテストでも隠す。 すべての|| 新しい最も長いトークンの照合回路を確立する。 すなわち、もしあなたが使うなら| 右手に一方に加担しろ||右辺がこの部分式のために最も長いトークンの処理のために新しい最高級のスコープを確立する、そして何でもサブルールを呼び出したこと。 副菜の最も長いトークンのオートマトンが(それより)左寄りに見えない権利|| あるいは正規表現を含んでいることの外(に・で)||.

マッチから値を返せ

マッチオブジェクト

サブパターンキャプチャ

アクセスが subpatterns を取り込んだ

サブパターンキャプチャをネストした

サブパターンキャプチャを数量化した

間接的に数量化されたサブパターンキャプチャ

サブパターンナンバリング

サブルールキャプチャ

アクセスがサブルールをとらえた

同じサブルールの繰り返されたキャプチャ

エイリアシング

別名が名前をつけられるか、あるいは番号を付けられることができる。 それらはスカラー、配列かハッシュのようであり得る。 そしてそれらが取り込んでいるか、あるいは取り込まない構造に適用されることができる。 それらの組み合わせの若干の意味規則の次節ハイライト特色。

subpatterns にスカラーエイリアシングに指命される

名指されたスカラー別名が取り込まない括弧に当てはまった

サブルールにスカラーエイリアシングに指命される

ナンバーが付けられたスカラーエイリアシング

スカラー別名が数量化された構造に当てはまった

配列エイリアシング

ハッシュエイリアシング

外部のエイリアシング

繰り返されたマッチから取り込む

文法

構文的なカテゴリー

サブルール、あなたが増大させるかもしれないあなた自身のバックスラッシュとアサーションを書くことに対して、(あなたのコピーの)次の構文カテゴリを使っている正規表現部分言語:

augment slang Regex {
    token backslash:sym<y> { ... }   # define your own \y and \Y
    token assertion:sym<*> { ... }   # define your own <*stuff>
    token metachar:sym<,> { ... }    # define a new metacharacter

    multi method tweak (:$x) {...}   # define your own :x modifier
}
 

Pragmas

種々のプラグマが正規表現コンパイルの諸相とさもなければ提供されない使用をコントロールするために使われるかもしれない。 これらは問題の特定の宣言詞にタイされる:

use s :foo;         # control s defaults
use m :foo;         # control m defaults
use rx :foo;        # control rx defaults
use regex :foo;     # control regex defaults
use token :foo;     # control token defaults
use rule :foo;      # control rule defaults
 

(さもなければするべき良い理由がないなら、キーワードの表面振る舞いがキーワード自身とまったく同じであることはプラグマが設計した何でも影響を与える Perl 6 の一般的なポリシーだ。 他方、もちろんいずれかの類似性が良いけれども、深い意味規則に影響を与えるよう意図されたプラグマが同じく名前をつけられるべきじゃない。)

文字変換

置換

同じくメソッドフォームがあるのm// そしてs///

 $str.match(/pat/);
 $str.subst(/pat/, "replacement");
 $str.subst(/pat/, {"replacement"});
 $str.=subst(/pat/, "replacement");
 $str.=subst(/pat/, {"replacement"});
 

.match そして.subst メソッドが副詞をサポートするのm// そしてs/// あなたが書くことができるように、引数と命名されるように

$str.match(/pat/, :g)
 

等価物としてそうするために

$str.comb(/pat/, :match)
 

ここに構文的な構文糖がない、それで代替物の延期された評価を得るために、あなたはそれをクロージャに入れなくちゃならない。 構文的な構文糖は quotelike フォームによってだけ供給される。 最初に標準的な「3つの要素から成るクォート」形状がある:

s/pattern/replacement/
 

ただ非括弧の文字だけが「3つの要素から成るクォート」のために使われるかもしれない。 それがクォートにかかわらず選択された二重に引用された文字列であるかのように、右側は常に評価される。

Perl 5 と同じように、フォームをかっこでくくることが同じくサポートされる、しかし Perl 5 と異なり、 Perl 6 はただパターンの周りに括弧を使う。 それが、普通の引用ルールで、普通の項目割り当てであるかのように、取り換えはそれから指定される。 あなた自身のクォートが右手にただ1(人・つ)を使う指名にq フォーム。 上の置換は同等の値:だ

s[pattern] = "replacement"
 

あるいは

s[pattern] = qq[replacement]
 

置換がマッチする(擬似割り当てとほとんど同じように宣言子に奇妙な時に起きることができる)たびに、これは右側が評価されるから、標準の assigment じゃない。 従ってそれは「thunk」として取り扱われる、すなわち、それはかなりのレキシカルスコープではなく、ダイナミックスコープを作成するコードと呼び出されるだろう。 (あなたは同じく thunk を寄生するように現在のレキシカルスコープを使うクロージャであると考えることができる。) 実際、言うことはまったく意味をなさない

s[pattern] = { doit }
 

なぜならそれは文字列の中にクロージャを代用しようとするだろうから。

Any スカラー割り当て演算子が使われるかもしれない;置換マクロはどのように向きを変えるべきか知っている

$target ~~ s:g[pattern] op= expr
 

何かにあたかも:

$target.subst(rx[pattern], { $() op expr }, :g)
 

例えば、あなたが缶詰めにするように、すべてのドルの量に2を掛けろ:

s:g[\$ <( \d+ )>] *= 2
 

(もちろん、オプティマイザは実際のメソッドより速い何かを呼び出しですることが自由だ。)

あなたは最後の例から置換がただマッチの「公式の」文字列結果、すなわち、中間の文字列の部分を偶然発見するだけであることを指摘するだろう$/.from そして$/.to ポジション。 (ここで我々は人たちに明示的に使わせた<(...)> 対になれ;さもなければ我々は後読みをマッチするために使わなければならなかっただろう$.)

どうかそれに注意する:ii/ :samecase そして:mm/ :samemark スイッチは1つで本当に2つの異なった修飾子だ、そしてコンパイラがクォートのようなフォームを desugars するとき、それはパターンと代替物両方に意味規則を配る。 すなわち、:ii 取り換えの上に暗示する:i パターン、に関してそして:mm 暗示する:m.  適切なメソッド匹敵するもの値:

s:ii/foo/bar/
s:mm/boo/far/
 

存在する:

.subst(/foo/, 'bar', :ii)   # WRONG
.subst(/boo/, 'far', :mm)   # WRONG
 

けれどもどちらかと言えば:

.subst(rx:i/foo/, 'bar', :ii)   # okay
.subst(rx:m/boo/, 'far', :mm)   # okay
 

それがケースとマークに関して正規表現を一般的であるとして扱うことは特に実装に要求されない。 さかのぼって有効なリコンピレーションが有害であると見なされる。 もし実装がいい加減な一般的なケースとマーク意味規則をするなら、それの上に依存することはプログラムにとって誤っているそして据え置き型だ。

位置のマッチしている、固定幅型

非文字列に対してマッチしている

いつ$/ 正当だ

implementational 自由を提供するために、$/ パターンがそれを必要とするシーケンスポイントに達するまで(マッチ、あるいは埋め込みのクロージャを呼び出すこと、あるいは Perl 展開式を必要とするサブマッチをその引数について診断することさえ完了するような)、変数ではないが定義されることを約束した。 正規表現コードの中で、$/ 公式に未定義で、そしてそうするための参照だ$0 あるいは他のキャプチャ変数がそうするための参照がない現在の値を生産するためにコンパイルされるかもしれない$/.  同じくそうするための参照$<foo> 必ずしも平均ではなくする$/<foo> 正規表現プロパーの中で。 ステートが実際に記憶されるマッチ、現在のマッチの実行の間に レキシカルスコープなではないが行儀よく振る舞うことを約束したマッチ、しかしそれの適切な部分への変数$/ オブジェクト、から$/ 型の(こと・もの)だMatchステートが型について生じるマッチである間にCursor.

何ででもこれが(そのために)すべてユーザーにトランスペアレントな場合が簡単にマッチする;そして正規表現コードの外で(そして正規表現の中でクロージャの中に)$/ 変数がその時点でマッチのステートを表すことを保証される。 すなわち、標準の Perl コードが上に常に依存することができる$<foo> 意味$/<foo>そして$0 意味$/[0]マッチが完了した後、そのコードが正規表現の中のあるいは正規表現の外のクロージャで埋め込みかにかかわらず。