TITLE

DRAFT : Synopsis 19:コマンドラインインタフェース

AUTHORS

Jerry Gay <jerry.gay@rakudoconsulting.com>
 

VERSION

Created: 12 Dec 2008

Last Modified: 26 Oct 2009
Version: 26
 

これはドラフトドキュメントだ。 このドキュメントはコマンドラインインタフェースを記述する。 それは明快さ、無矛盾性と拡張性を増やすために広範囲に Perl の前バージョンから変化した。 構文修正の多くが拡張だ、それであなたはあなたの筋肉記憶装置で埋め込みの Perl 5 構文の多くがまだ働くであろうことに気付くだろう。

顕著な機能が下のセクションでインクルードを記述した:

それがプログラムの論理積とオペレーティング・システムのコマンドラインシェルとそれで一貫した構文すべての場所としてのアクセスされたではないにおいて起こるという点で、 Perl 6 へのこのインタフェースは特別だ。 希望を抱いて時間のテストに耐えるであろう少数の仮定が、ここで、される: さもなければ証明されないなら、すべてのコマンドライン引数は Unicode にあると考えられる;そして Perl は Unix から生まれる、そしてそんなものとしてこのドキュメントで提出された構文は Unix 式のシェルで働くために期待される。 他のオペレーティング・システムの詳細を探究するために、 Synopsis 25S25 - 移植性)(TBD)を見ろ。

コマンドライン要素

コマンドラインは2つの基本的な要素に分解される:プログラム引数。 それぞれのコマンドライン要素が分離された空白文字だ、それで空白文字を含んでいる要素が引用されなくちゃならない。 プログラムは引数を処理して、そして求められた動作を行なう。 それは /usr/bin/perl6 、オウム perl6.pbc 、あるいは rakudo (あるいはモノラルの niecza.exe など)のような何かに見えて、そして 0 あるいはもっと多くの引数によって後に続かれる。 Perl 6 はコマンドライン、しかしそれのプログラム部を処理することがとして実行時において利用可能にされる何もしないPROCESS::<$PROGRAM_NAME> 変数。

コマンドライン引数がオプションに分解される。 それぞれの選択肢が値をゼロか、あるいはもっと多くするかもしれない。 すべてのオプションが処理された後、残っている値は一般に、(もしあるとしたら)、そのスクリプトのために引数によって後に続かれて、 Perl が実行するべきスクリプトの名前から成り立つ。 ない場合値が残留する、 Perl 6 はスクリプトを読むために暗黙的に標準入力を開く。 もしあなたが名指しでパスするために、スクリプトへの引数が標準入力から、あなたが標準入力を指定しなくちゃならないと書いてあるのを読んだならいいのにと思うなら(- たいていのオペレーティング・システムで).

Backward (中に)両立性

あなたはあなた自身が、 Christmas が来た後さえ、あなたの大好きな Perl 5 オプションをタイプしているのを見いだすかもしれない。 あなたが下を見るであろう(とき・から・につれて・ように)、同様に作用する共通選択が提供される。 さらに少なく共通選択は、しかしながら、利用可能じゃないかもしれないか、あるいは構文を変えたかもしれない。 もしあなたが認められないコマンドライン構文を Perl に提供するなら、 Perl はあなたに友好的な誤りメツセージを与える。 もし認められない構文が正当な Perl 5 選択肢であるなら、 Perl はあなたに現在の構文を使って同じ行動を行なうことを許すために役立つ提案を提供する。

変化していない構文的な Features

いくつかの機能が Perl 5 から変化しなかった、それは下記を含む:

構文的な Features を削除した

Perl 5 コマンドラインが優れた特徴とする若干数が、 Perl 6 にそれをする新しくて、そして異なった方法があるから、同様、もう利用可能じゃない、あるいはなぜならそれらもう適切じゃない. ここに取り去られたものの破壊がある:

-0 * 8進法の / 16進法の *

入力レコードセパレータをセットする。 指定の欠如のために Synopsis 16S16 - io)で欠けている。 このドキュメントの終わりに「注意する」項にこれについてのコメントがある。

- C * 数 / リスト *

Control unicode が役割を果たす。 Perl 6 は(、この相関性がどのポイントに再考されるかもしれないかについて、さもなければ証明されるまで) unicode 意味規則を持っていて、そして UTF-8 コマンドラインインタフェースを引き受ける。

- d、 - dt 、 -d:foo 、 - Dなど。

Debugging コマンド。 置き換える++BUG メタ構文な選択肢。

- E * ライン *

すべての機能が使用可能であるという状態で、コード行を実行しろ。 これは Perl 5.10に特殊で、そして、どこ(で・に)、 Perl 6 に適切じゃない-e この関数を行なう。

- i * 機能拡張が *

Modify が決まった場所でファイルする。 まだ付け加えるのに十分それについて考えなかった、しかし私はそれが強い下記を持っていることが確かだ。 {{TODO review decision here}}

- l

自動回線を終わらせるプロセッシングを可能にしろ。 これは省略時動作だ。

- M * モジュール * 、 - m * モジュール * など。

モジュールではなく、使用。 通り過ぎて置き換えられる--use.

- P

選択肢を Cプリプロセッサでチェックしろ。 これは Perl 5 のために問題を起こして、そして今完全に時代遅れだ。

- s

基本的なスイッチパージングを可能にしろ。 デフォルト、シグネチャーがユーザによって主として供給した引数が使ったスクリプトにパスした Perl 6 解析結果によってルーチン(S06 - サブルーチンに「メインサブルーチンを宣言している」を見ろ)。

- t

Enable が警告方式を傷つける。 汚点方式がもっと多くの考えを必要とする、しかしそれはずっとより見込みが高くそれである-T スイッチが関連した振る舞いを実装する2番目のコマンドラインフラグを使うよりむしろオプションをとるだろう。

- u

プログラムを解析した後で、中核となる(人たち・もの)を捨てろ。 これは時代遅れであるとみなされた。

- U

安全でない演算を許せ。 これは非常にである危険で、そしてたまに使われた、そしてそれ自身のコマンドラインオプションに値しない.

- w

警告を可能にしろ。 これは省略時動作だ。

- W

すべての警告を可能にしろ。 これはたまに使われて、そしてそれ自身のコマンドライン選択肢に値しない。

- X

すべての警告を停止させろ。 これはたまに使われて、そしてそれ自身のコマンドライン選択肢に値しない。

Options と値

コマンドラインオプションが次のルールを使って解析される:

区切られたオプションが透過的にパスするあなたにそれらのオプションを区切る特別なオプションによっての1つ以上の同じぐらい指定された部分システムまでのオプションを許す。 それらが次のルールに従って解析されて存在する:

これらの選択はそれらに合っている変数が名前をつけて、そして見えない 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>プロセスがどのようにそのインタープリタを設定するかについて、依存する。

値が次のルールで解析される:

残っている引数

Any の残っている引数が Perl6 プログラムに @ * 引数配列に置かれる。

Option 参照

Perl 6 オプション、記述とサービス。

Synopsis

  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.

++ cmd - コマンドライン - パーサ * パーサ * ++ / cmd

コマンドライン中央演算処理装置を加えろ。 この選択肢が解析されるとき、それはすぐにコマンドラインパーサに影響を与えるか、あるいは取り換える動きを引き起こす。 そのために、それは可能な限り早く引数リストにこの選択肢をもたらすために良い考えだ。

- 妨害 - 構文、 - c

構文をチェックして、それから去れ。 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 が短い名前のために使った ++ を作成するかもしれない}}

++ BUG [ * スイッチ * * flags * ] ++ / BUG

Set はデバッガのために乗り換えて、そして衰える。

注意しろ:デバッガはそれ以上の指定を必要とする。

- 実行、 - e * ライン *

単一行プログラムを実行しろ。 Multiple -e それぞれが終わりに暗黙の改行で入力線を表すという状態で、オプションが鎖でしばられるかもしれない。

もしあなたが、批評なしで、厳しくない方式で走ることを望む、そして可能にされた警告がパスするなら - eがコマンドラインで、好きである最初への「6;」の値-e '6;'.  詳細な情報については Synopsis 11S11 - モジュールの中の quot ;強制力 Perl 6 & quot ;)を見ろ。

- 自(己・動)ループ - delim 、 - F * 展開式 *

分割するべきパターンが実行される(- で使われた a) . 展開式をそうなデフォルト分裂関数の代わりに用いる{split ' '}.  (あなたのシェルがあなたにそれらをパスさせる限り)、 unicode 文字列を受け入れる。 パスすることにクロージャ(例えば - F「{use Text::CSV}」)を許す。 awk はもうもっと良くない :)

- 手助け、 - h

オプションの要点を印刷しろ。 Desugars にそうするために++CMD --print-help --exit ++/CMD.

- 含め、 - I * ディレクトリ * [ * ディレクトリ * [・・・。]]

アドホックな図書館を捜索することに対して、 @ * 社にディレクトリを前接続しろ。 標準ライブラリを捜索することは Synopsis 11S11 - モジュール)で並べ広げられたポリシーの後に続く。

- 言語、 - L * dsl *

スクリプトファイルを解析することに対して、領域特定言語を設定しろ。 (すなわち、プログラムのために(しばしば前兆として知られている)設置を指定しろ。) ++PARSER --setting=*dsl* ++/PARSER.

- 自(己・動)ループ - 非印字、-n

awk のように振る舞え。 Desugars にそうするために++PARSER --setting=Perl6-autoloop-no-print ++/PARSER.

- 出力形式、 - O * 構成 *

すぐにコンパイルされたコード化を呼び出すよりむしろ、標準出力に指定された構成にコンパイラ生産を発散しろ。 この選択肢は実装に特定されている、それでそれ以上の詳細な情報についてはあなたの Perl 6 実装のためにドキュメンテーションを調べろ。

- 自(己・動)ループ - 印字、 - p

セッドのように振る舞え。 Desugars にそうするために++PARSER --setting=Perl6-autoloop-print ++/PARSER.

- 探索パス、 - S

道環境変数をコマンドラインに指定されたスクリプトを検索するために使え。

- 汚せ、 - T

「汚点」をチェックすることを攻撃する。 詳細な情報については Synopsis 23S23 - 機密保護)を見ろ。 非常に早く約束する。 コマンドラインに可能な限り早くこの選択肢を置け。

- 使用、 - u * モジュール *

--use *module* そして-u *module* desugars にそうするために-e 'use *module*'.  バージョンインフォメーションを指定して、そして、モジュール名にインフォメーションを添えることによって、シンボルを読み込め:

  -u'Sense:auth<cpan:JRANDOM>:ver<1.2.1> <common @horse>'
 

あなたはクォートを必要とするだろう、それであなたのシェルは配送について不平を言わない。 賛成の特別なコマンドライン構文がない'no *module*使用-e.

- バージョン、 - v

プログラム名、バージョン、 patchlevel などを表示しろ。 Desugars にそうするために++CMD -v ++/CMD ++PARSER -v ++/PARSER ++BUG -v ++/BUG.

- 冗長な - 環境設定、 - V

設定詳細な情報を表示しろ。 Desugars にそうするために++CMD -V ++/CMD ++PARSER -V ++/PARSER ++BUG -V ++/BUG.

- 「テキストからの抜粋」、 - x

Unicode テキストで埋め込みの失点プログラム。 最初のライン皮切りのためのスキャン#! そして言葉を含んでいるperlそしてその代わりにそこのスタート。 これはより大きい通信で埋め込みのプログラムを走らせることに役立つ。 (この場合あなたはプログラム使用方法の終わりを示すだろう=END Synopsis 26S26 - ドキュメンテーションquot ; = END ブロック& quot ;)を定義したように、ブロックしろ。)

Desugars にそうするために--PARSER --Perl6-extract-from-text --/PARSER.

メタ構文な Options

メタ構文なオプションは 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 変数

Environment 変数はコマンドライン引数と同じ影響に慣れているかもしれない。

PATH

サブプロセスを実行することにおいて、そして、もし - Sスイッチが使われるなら、プログラムを発見することに対して、使われる。

PERL6LIB

アドホックな Perl ライブラリファイルを探すディレクトリのA級リスト。

注意しろ: S11 が単なるディレクトリの原因究明と不適合な種々の行動を義務化する限りにおいて以外、これはまだではないをロードしているライブラリが指定した(とき・から・につれて・ように)、投機的だ。

PERL6OPT

デフォルトコマンドライン引数。 ここで見いだされた引数がコマンドラインに用意された引数のリストに前接続される。

参照

http://perldoc.perl.org/perlrun.html
http://search.cpan.org/~jv/Getopt-Long-2.37/lib/Getopt/Long.pm
http://search.cpan.org/~dconway/Getopt-Euclid-v0.2.0/lib/Getopt/Euclid.pm
http://perlcabal.org/syn/S06.html#Declaring_a_MAIN_subroutine
http://search.cpan.org/src/AUDREYT/Perl6-Pugs-6.2.13/docs/Pugs/Doc/Run.pod
http://haskell.org/ghc/docs/latest/html/users_guide/using-ghc.html
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html

注意する

私は例えば命令入力行からの入力レコードセパレータが perl 5相当を指定するように調節することが可能でありたい$/ = \32768;.  Int に ? を評価する1つのクロージャで私が解法を持っていない、しかし多分パスするほど遠い S16 がさらに開発されるとき、これは新しいファイルハンドルに同じことをするどんな選択肢でも使おうとするべきだ。

Sandboxing - 多分 - がそうだ

Env 変数 - 多分 - E . 異なった設置を代用することに関して、提出されることができた。