DRAFT : Synopsis 19:コマンドラインインタフェース
Jerry Gay <jerry.gay@rakudoconsulting.com>
Created: 12 Dec 2008 Last Modified: 26 Oct 2009 Version: 26
これはドラフトドキュメントだ。 このドキュメントはコマンドラインインタフェースを記述する。 それは明快さ、無矛盾性と拡張性を増やすために広範囲に Perl の前バージョンから変化した。 構文修正の多くが拡張だ、それであなたはあなたの筋肉記憶装置で埋め込みの Perl 5 構文の多くがまだ働くであろうことに気付くだろう。
顕著な機能が下のセクションでインクルードを記述した:
中核となる(人たち・もの)の頭が良いデフォルトコマンドライン中央演算処理装置
すべてのオプションは増加した明快さの長い、記述的な名前を持っている
共通選択がショート、単一キャラクター名を持っていて、そして群がることを許す
真で / 偽で構文がブールをセットする能力に提供する選択肢を拡張した
新しい++ メタ構文がオプションがサブシステムにパスされることを可能にする
それがプログラムの論理積とオペレーティング・システムのコマンドラインシェルとそれで一貫した構文すべての場所としてのアクセスされたではないにおいて起こるという点で、 Perl 6 へのこのインタフェースは特別だ。 希望を抱いて時間のテストに耐えるであろう少数の仮定が、ここで、される: さもなければ証明されないなら、すべてのコマンドライン引数は Unicode にあると考えられる;そして Perl は Unix から生まれる、そしてそんなものとしてこのドキュメントで提出された構文は Unix 式のシェルで働くために期待される。 他のオペレーティング・システムの詳細を探究するために、 Synopsis 25(S25 - 移植性)(TBD)を見ろ。
コマンドラインは2つの基本的な要素に分解される:プログラムと引数。 それぞれのコマンドライン要素が分離された空白文字だ、それで空白文字を含んでいる要素が引用されなくちゃならない。 プログラムは引数を処理して、そして求められた動作を行なう。 それは /usr/bin/perl6 、オウム perl6.pbc 、あるいは rakudo (あるいはモノラルの niecza.exe など)のような何かに見えて、そして 0 あるいはもっと多くの引数によって後に続かれる。
Perl 6 はコマンドライン、しかしそれのプログラム部を処理することがとして実行時において利用可能にされる何もしないPROCESS::<$PROGRAM_NAME>
変数。
コマンドライン引数がオプションと値に分解される。
それぞれの選択肢が値をゼロか、あるいはもっと多くするかもしれない。 すべてのオプションが処理された後、残っている値は一般に、(もしあるとしたら)、そのスクリプトのために引数によって後に続かれて、 Perl が実行するべきスクリプトの名前から成り立つ。 ない場合値が残留する、 Perl 6 はスクリプトを読むために暗黙的に標準入力を開く。 もしあなたが名指しでパスするために、スクリプトへの引数が標準入力から、あなたが標準入力を指定しなくちゃならないと書いてあるのを読んだならいいのにと思うなら(- たいていのオペレーティング・システムで).
あなたはあなた自身が、 Christmas が来た後さえ、あなたの大好きな Perl 5 オプションをタイプしているのを見いだすかもしれない。 あなたが下を見るであろう(とき・から・につれて・ように)、同様に作用する共通選択が提供される。 さらに少なく共通選択は、しかしながら、利用可能じゃないかもしれないか、あるいは構文を変えたかもしれない。 もしあなたが認められないコマンドライン構文を Perl に提供するなら、 Perl はあなたに友好的な誤りメツセージを与える。 もし認められない構文が正当な Perl 5 選択肢であるなら、 Perl はあなたに現在の構文を使って同じ行動を行なうことを許すために役立つ提案を提供する。
いくつかの機能が Perl 5 から変化しなかった、それは下記を含む:
最多の共通オプションは一つの文字の短い名前を持っている
一つの文字の選択は同じ構文と意味規則で集中しているかもしれない
多くのコマンドラインオプションが例えば、同様に、性質を有する:
Option... Still means... -a Autosplit -c Check syntax -e *line* Execute -F *expression* Specify autosplit field separator -h Display help and exit -I *directory*[,*directory*[,...]] Add include paths -n Act like awk -p Act like sed -S Search PATH for script -T Enable taint mode -v Display version info -V Display verbose config info
これらすべてのオプションは構文を伸ばした、そしていくらかが少し異なった意味規則を持っているかもしれない、それで詳細な情報については下の「Option 参照」を見ろ。
Perl 5 コマンドラインが優れた特徴とする若干数が、 Perl 6 にそれをする新しくて、そして異なった方法があるから、同様、もう利用可能じゃない、あるいはなぜならそれらもう適切じゃない. ここに取り去られたものの破壊がある:
入力レコードセパレータをセットする。 指定の欠如のために Synopsis 16(S16 - io)で欠けている。 このドキュメントの終わりに「注意する」項にこれについてのコメントがある。
Control unicode が役割を果たす。 Perl 6 は(、この相関性がどのポイントに再考されるかもしれないかについて、さもなければ証明されるまで) unicode 意味規則を持っていて、そして UTF-8 コマンドラインインタフェースを引き受ける。
Debugging コマンド。 置き換える++BUG メタ構文な選択肢。
すべての機能が使用可能であるという状態で、コード行を実行しろ。 これは Perl 5.10に特殊で、そして、どこ(で・に)、 Perl 6 に適切じゃない-e この関数を行なう。
Modify が決まった場所でファイルする。 まだ付け加えるのに十分それについて考えなかった、しかし私はそれが強い下記を持っていることが確かだ。 {{TODO review decision here}}
自動回線を終わらせるプロセッシングを可能にしろ。 これは省略時動作だ。
モジュールではなく、使用。 通り過ぎて置き換えられる--use.
選択肢を Cプリプロセッサでチェックしろ。 これは Perl 5 のために問題を起こして、そして今完全に時代遅れだ。
基本的なスイッチパージングを可能にしろ。 デフォルト、シグネチャーがユーザによって主として供給した引数が使ったスクリプトにパスした Perl 6 解析結果によってルーチン(S06 - サブルーチンに「メインサブルーチンを宣言している」を見ろ)。
Enable が警告方式を傷つける。 汚点方式がもっと多くの考えを必要とする、しかしそれはずっとより見込みが高くそれである-T スイッチが関連した振る舞いを実装する2番目のコマンドラインフラグを使うよりむしろオプションをとるだろう。
プログラムを解析した後で、中核となる(人たち・もの)を捨てろ。 これは時代遅れであるとみなされた。
安全でない演算を許せ。 これは非常にである危険で、そしてたまに使われた、そしてそれ自身のコマンドラインオプションに値しない.
警告を可能にしろ。 これは省略時動作だ。
すべての警告を可能にしろ。 これはたまに使われて、そしてそれ自身のコマンドライン選択肢に値しない。
すべての警告を停止させろ。 これはたまに使われて、そしてそれ自身のコマンドライン選択肢に値しない。
コマンドラインオプションが次のルールを使って解析される:
Options が次のシンボルの1人から始まらなくちゃならない:---あるいは:.
Options は大文字小文字の違いを識別する。 -o そして-O 同じ選択肢じゃない。
すべてのオプションは多文字、増加した明快さのための記述名を持っている。
オプション名が常に始まる多文字-- あるいは:.
共通オプションがスピードの短い、1文字の名前を持っている。
一つの文字が常にで始まる段落に名前をつける-.
一つの文字の選択は集中しているかもしれない。 -ab 手段-a -b. 値を必要とする一つの文字の選択肢が群がっているとき、選択肢は集まりの最終の立場にだけ現われるかもしれない。
Options が否定されるかもしれないで/例えば--/name:/name-/n. 否定された単一キャラクターオプションがクラスターに現われることができない。 実際は、否定されたオプションは False に、たいていのブールのオプションのデフォルトとして、とにかくまれだ。
Option 名が6つの識別子ネーミング規定、が除外する Perl の後に続く' ではない許可と単一キャラクターオプションはどんな文字あるいは数でもであるかもしれない。
特別な選択肢-- 選択肢が処理するのを止めるべきパーサに信号を送る。
引数の後に続くそのまま-- (識別子なしで)常にたとえそれら様子であるとしても正当なオプションのように、値のリストと解析される。
区切られたオプションが透過的にパスするあなたにそれらのオプションを区切る特別なオプションによっての1つ以上の同じぐらい指定された部分システムまでのオプションを許す。 それらが次のルールに従って解析されて存在する:
冒頭の、そして終わりの区切り文字で始まる段落2かそれ以上プラス例えば文字++. あなたは通常2つの正の文字を使うだろう、しかしさらに多くが、区切られた選択をネストするとき、あいまい性を避けることを許される。
冒頭の、そして終わりの区切られたオプション名が上に定義された選択肢識別子命名規約の後に続く。
もし終わりの区切り文字が除かれるなら、コマンドラインの残りが消費される。
区切られた選択肢、の中に-- 選択肢が終わりの区切り文字を検索することを隠さない。 すなわち、ただ区切り文字の中の引数の残りだけが値として扱われる。
マッチしている意味規則が存在することを熱望していて、使われて、それで見いだされた最初の終わりの区切り文字がマッチを完了する。
区切られた選択が否定されることができない。 しかしながら、最終の区切り文字は、終わりのHTMLタグとほとんど同じように、区切られたプロセッシングの端子を指し示しているスラッシュをとる。
これらの選択はそれらに合っている変数が名前をつけて、そして見えない dynamic で利用可能にされるMAIN() として以外%*OPTS<name>. 例:
++PARSER --setting=Perl6-autoloop-no-print ++/PARSER
あなたのスクリプトの中に利用可能であるけれども%*OPTS<PARSER>そして部分一致--setting=Perl6-autoloop-no-print. 熱心なマッチングが使われるから、もしあなたがパスする必要があるなら、何かが好む:
++foo -bar ++foo baz ++/foo ++/foo
あなたは終わるであろうで
%*OPTS<foo> = '-bar ++foo baz';
それはおそらくあなたが欲したものじゃない。 その代わりに、余分のものを加えろ+ 文字
+++foo -bar ++foo baz ++/foo +++/foo
それはあなたを与えるだろう
%*OPTS<foo> = '-bar ++foo baz ++/foo';
あなたに適切に区切られた選択をネストすることを許す。
実際の記憶域場所の%*OPTS あるいは中にいるかもしれないPROCESS::<%OPTS>
あるいはGLOBAL::<%OPTS>プロセスがどのようにそのインタープリタを設定するかについて、依存する。
値が次のルールで解析される:
値が次の構文で選択にパスされる--option=value
あるいは--option value.
空白文字を含んでいる値が例えばクォートに同封されなくちゃならない-O="spacey value"
多数の値は、同じぐらい中に、選択肢の多数の例を指定することによって、パスする--option=val1 --option='val 2'.
Any の残っている引数が Perl6 プログラムに @ * 引数配列に置かれる。
Perl 6 オプション、記述とサービス。
multi sub perl6(
Bool :a($autoloop-comb),
Bool :c($check-syntax),
Bool :$doc,
:e($execute),
:F($autoloop-delim),
Bool :h($help),
:I(@include),
:L($language),
Bool :n($autoloop-no-print),
:O($output-format),
Bool :p($autoloop-print),
Bool :S($search-path),
Bool :T($taint),
:u($use),
Bool :v($version),
Bool :V($verbose-config),
Bool :x($extract-from-text),
);
使われるとき、で-n あるいは-p暗黙のうちにインプットを調べて、そして結果にそうすることを割り当てる@_ 生産されたループの中通り過ぎて-n あるいは-p.
デフォルトパターンはそうだ/\S+/コームのためのパターンが一緒に指定されるかもしれない代理--autoloop-pattern知られる. -F.
コマンドライン中央演算処理装置を加えろ。 この選択肢が解析されるとき、それはすぐにコマンドラインパーサに影響を与えるか、あるいは取り換える動きを引き起こす。 そのために、それは可能な限り早く引数リストにこの選択肢をもたらすために良い考えだ。
構文をチェックして、それから去れ。 Desugars にそうするために-e 'CHECK{ compiles_ok(); exit; }'.
Pod 構成で Perl ドキュメンテーションをルックアップしろ。 Desugars にそうするために-e 'CHECK{ compiles_ok(); dump_perldoc(); }'. $*ARGS 引数がパスした部分一致perl6そして利用可能だでCHECK 時間、そうだdump_perldoc() コマンドラインオプションに返答することができる。
{{それが perl 5とぶつかるけれども、 TODO が部分システム here. が同じく、そうするかもしれない DOC が短い名前のために使った ++ を作成するかもしれない}}
Set はデバッガのために乗り換えて、そして衰える。
注意しろ:デバッガはそれ以上の指定を必要とする。
単一行プログラムを実行しろ。 Multiple -e それぞれが終わりに暗黙の改行で入力線を表すという状態で、オプションが鎖でしばられるかもしれない。
もしあなたが、批評なしで、厳しくない方式で走ることを望む、そして可能にされた警告がパスするなら - eがコマンドラインで、好きである最初への「6;」の値-e '6;'. 詳細な情報については Synopsis 11(& S11 - モジュールの中の quot ;強制力 Perl 6 & quot ;)を見ろ。
分割するべきパターンが実行される(- で使われた a) . 展開式をそうなデフォルト分裂関数の代わりに用いる{split ' '}. (あなたのシェルがあなたにそれらをパスさせる限り)、 unicode 文字列を受け入れる。 パスすることにクロージャ(例えば - F「{use Text::CSV}」)を許す。 awk はもうもっと良くない :)
オプションの要点を印刷しろ。 Desugars にそうするために++CMD --print-help --exit ++/CMD.
アドホックな図書館を捜索することに対して、 @ * 社にディレクトリを前接続しろ。 標準ライブラリを捜索することは Synopsis 11(S11 - モジュール)で並べ広げられたポリシーの後に続く。
スクリプトファイルを解析することに対して、領域特定言語を設定しろ。 (すなわち、プログラムのために(しばしば前兆として知られている)設置を指定しろ。)
++PARSER --setting=*dsl* ++/PARSER.
awk のように振る舞え。 Desugars にそうするために++PARSER --setting=Perl6-autoloop-no-print ++/PARSER.
すぐにコンパイルされたコード化を呼び出すよりむしろ、標準出力に指定された構成にコンパイラ生産を発散しろ。 この選択肢は実装に特定されている、それでそれ以上の詳細な情報についてはあなたの Perl 6 実装のためにドキュメンテーションを調べろ。
セッドのように振る舞え。 Desugars にそうするために++PARSER --setting=Perl6-autoloop-print ++/PARSER.
道環境変数をコマンドラインに指定されたスクリプトを検索するために使え。
「汚点」をチェックすることを攻撃する。 詳細な情報については Synopsis 23(S23 - 機密保護)を見ろ。 非常に早く約束する。 コマンドラインに可能な限り早くこの選択肢を置け。
--use *module* そして-u *module* desugars にそうするために-e 'use *module*'. バージョンインフォメーションを指定して、そして、モジュール名にインフォメーションを添えることによって、シンボルを読み込め:
-u'Sense:auth<cpan:JRANDOM>:ver<1.2.1> <common @horse>'
あなたはクォートを必要とするだろう、それであなたのシェルは配送について不平を言わない。
賛成の特別なコマンドライン構文がない'no *module*使用-e.
プログラム名、バージョン、 patchlevel などを表示しろ。 Desugars にそうするために++CMD -v ++/CMD ++PARSER -v ++/PARSER ++BUG -v ++/BUG.
設定詳細な情報を表示しろ。 Desugars にそうするために++CMD -V ++/CMD ++PARSER -V ++/PARSER ++BUG -V ++/BUG.
Unicode テキストで埋め込みの失点プログラム。 最初のライン皮切りのためのスキャン#! そして言葉を含んでいるperlそしてその代わりにそこのスタート。
これはより大きい通信で埋め込みのプログラムを走らせることに役立つ。
(この場合あなたはプログラム使用方法の終わりを示すだろう=END
Synopsis に26(& S26 - ドキュメンテーションの quot ; = END ブロック& quot ;)を定義したように、ブロックしろ。)
Desugars にそうするために--PARSER --Perl6-extract-from-text --/PARSER.
メタ構文なオプションは Perl の基礎をなしている構成部分に引数をパスするために使われる区切られたオプションのサブセットだ。 Perl はそれ自身これらのオプションを解析しない、しかしそれらを実行時コンポーネントに提供するとして%*META-ARGS ダイナミックな変数。
標準入力 Perl 6 はコンポーネントの基礎となっている3だCMDPARSERそしてBUG. 実装がこのインタフェースとしての他のコンポーネントを呈示するかもしれない、それであなたの Perl 6 実装のためにドキュメンテーションを調べろ。
On command line... Subsystem gets... ++X a -b ++/X a -b # Nested options +++X a -b ++X -c ++/X -d e +++/X a -b ++X -c ++/X -d e # More than once (both are valid, but the second form is preferred) ++X a -b ++/X -c ++X -d e ++/X a -b -d e +++X a -b +++/X -c ++X -d e ++/X a -b -d e
Environment 変数はコマンドライン引数と同じ影響に慣れているかもしれない。
サブプロセスを実行することにおいて、そして、もし - Sスイッチが使われるなら、プログラムを発見することに対して、使われる。
アドホックな Perl ライブラリファイルを探すディレクトリのA級リスト。
注意しろ: S11 が単なるディレクトリの原因究明と不適合な種々の行動を義務化する限りにおいて以外、これはまだではないをロードしているライブラリが指定した(とき・から・につれて・ように)、投機的だ。
デフォルトコマンドライン引数。 ここで見いだされた引数がコマンドラインに用意された引数のリストに前接続される。
私は例えば命令入力行からの入力レコードセパレータが perl 5相当を指定するように調節することが可能でありたい$/ = \32768;. Int に ? を評価する1つのクロージャで私が解法を持っていない、しかし多分パスするほど遠い
S16 がさらに開発されるとき、これは新しいファイルハンドルに同じことをするどんな選択肢でも使おうとするべきだ。
Sandboxing - 多分 - がそうだ
Env 変数 - 多分 - E . 異なった設置を代用することに関して、提出されることができた。