[DRAFT] Synopsis 28 - Special Names [DRAFT]
Larry Wall <larry@wall.org> Tim Nelson <wayland@wayland.id.au> Lyle Hopkins <webmaster@cosmicperl.com> Carl Mäsak <cmasak@gmail.com>
Created: 23 Feb 2009, created by Tim Nelson from miscellaneous documents lying around Last Modified: 17 Nov 2010 Version: 9
このドキュメントは特別な変数について Perl 6 に知られているもののためにコレクションポイントの役をして、そして Perl 5 から変更とそれらを関連づける。
もしあなたが Perl 5 スペシャルの Perl 6 同等物があなたが知っている変数であることを見いだそうとしているなら、このファイルで Perl 5 バージョンを検索しようとしろ。 それぞれの主な項目が対応する Perl 5 変数を含んでいるメモによって後に続かれる。 主な項目のリストは同じく並んで5つと6つの変数を見せている表によって後に続かれる。
S02 からの適切な twigils の速い思い出すきっかけ:
$?foo # Compiler constants (fixed at compile time) $*foo # Context variable, default global (run time) $=foo # File-scoped Pod data
種々の(人たち・もの)$?foo 変数はコンパイル時間に決定されて、そしてランタイムに modifiable じゃない。 これは変数がどこでも同じ値を持っていることを意味しない;例えば、$?LINE プログラムのすべてのラインで異なっている。
$*foo ダイナミックにスコープ宣言された変数としてもそしてグローバルとしても共に変数関数。 Globalness は、言い換えれば、相対的だ。 ダイナミックスコープがとして目に見えるグローバルについてセットを変更するかもしれない Any $*foo 注釈。
下に実際に上場されたグローバルがいずれかを生活する標準の大部分PROCESS あるいはGLOBAL 実装、どこ(で・に)かPROCESS プロセス全体のものであるグローバルを含む、他方GLOBAL プロセスが1以上のインタプリターを走らせているかもしれないから、現在の通訳のものであるグローバルを含む。 下にそうでないことが明記されている場合を除いて、変数が保持されるこれらの最も外側の鮮明度PROCESS
パッケージ。
$=foo 変数が関連している to the $?foo プログラムのテキストがコンパイル時間に知られている限りにおいて変数、それで値はスタティックだ。 しかしながら、異なった twigil は変数が Pod データを含んでいることを示す、そしてそれはコンパイラコントロールよりむしろ主にユーザーコントロールの下にある。 これらの変数の構造が S26 で肉付けをされるだろう。
Variable Spec Type Description -------- ---- ---- ----------- @_ # ??? (FIX) $! S04 # Current Exception object $/ S05 Match # Last match $0, $1, $2 S05 Str # First captured value from match: $/[0] $?ARCH Application # Host architecture $?XARCH Application # Target architecture @*ARGS S06 Array of Str # command-line arguments $*ARGFILES S02 IO # The magic command-line input handle &?BLOCK S06 Block # current block (itself) ::?CLASS S12 Str # current class (as package or type name) $?CLASS S02 Class # current class @=COMMENT (S26) # All the comment blocks in the file %?CONFIG Hash of XXX # configuration hash XXX What does this do? $*CWD Path # current working directory $=DATA (S26) IO # data block handle (=begin DATA ... =end) @=DATA (S26) Array # Same as above, but array %?DEEPMAGIC S13 Hash of XXX # Controls the mappings of magical names to sub definitions $?DISTRO S02 Application # Which OS distribution am I compiling under $*DISTRO S02 Application # Which OS distribution am I running under $*EGID Int # effective group id %*ENV S02 Hash of Str # system environment variables $*ERR S16 IO # Standard error handle $*EUID Int # effective user id $*EXECUTABLE_NAME Str # executable name $?FILE S02 Str # current filename of source file $?GRAMMAR S02 Grammar # current grammar $*GID Int # group id $*IN S16 IO # Standard input handle; is an IO object @*INC S11 # where to search for user modules (but not std lib!) %?LANG S02 Hash of Grammar # What is the current set of interwoven languages? $*LANG S02 Str # LANG variable from %*ENV that defines what human language is used $?LINE S02 Int # current line number in source file %*META-ARGS S19 Hash of XXX # Meta-arguments $?MODULE S02 Module # current module %*OPTS S19 Hash of XXX # Options from command line %*OPT... S19 Hash of XXX # Options from command line to be passed down $?KERNEL Application # operating system compiled for $*KERNEL Application # operating system running under $*OUT S16 IO # Standard output handle $?PACKAGE S02 Package # current package $?PERL S02 Application # Which Perl am I compiled for? $*PERL S02 Application # perl version running under $*PID Int # system process id %=POD S02 # (or some such) $*PROGRAM_NAME S19 Str # name of the Perl program being executed %*PROTOCOLS S16 Hash of Method # Stores the methods needed for the uri() function ::?ROLE Str # current role (as package or type name) $?ROLE S02 Role # current role &?ROUTINE S06 Routine # current sub or method (itself) $?SCOPE S02 # Current "my" scope (XXX unnecessary?) $*TZ S32 # Local time zone $*UID Int # system user id $?USAGE S06 Str # Default usage message generated at compile time $?VM S02 Application # Which virtual machine am I compiling under $?XVM S02 Application # Which virtual machine am I cross-compiling for
それほどダイナミックな変数的に注意するよう$*OUT 外のダイナミックなコンテキスト、それが定義される一番奥のダイナミックスコープがどちらのケースに意味を決定するかで1つの現在の定義よりいっそう多くを持っているかもしれない。 例えば、$PROCESS::OUT プロセス全体のために標準出力だ、しかしそれぞれの通訳がそれ自身のものを設定することができる$GLOBAL::OUT 型に$*OUT それが他のインタープリタとは無関係に一体何を欲するかを意味する。 ダイナミックスコープが同じくローカルな意味を宣言するかもしれない Any $*OUT それは適用される、ただそうすることはコードを呼び出した。 同じくそれぞれのスレッドがそれ自身のものにそれ自身のエラーを記録することができた$*ERR、スレッドからダイナミックスコープだ。
クラスApplication 共通が特別な変数の若干についてそんなものを優れた特徴とする少数を集める$*PERL$?VM$*KERNELなど.
class Application {
has Str $.name;
has Str $.auth;
has Version $.version;
}
もし円柱がその中に " " を持っているなら、それはその項目が Perl のそのバージョンで利用できないことを意味する。
Perl 5 Perl 6 Comment
----------- ----------- -----------------------
STDIN $*IN See S16; actual variable is $PROCESS::IN
STDOUT $*OUT See S16; actual variable is $PROCESS::OUT
STDERR $*ERR See S16; actual variable is $PROCESS::ERR
$_ $ARG $_ More lexically aware
$_[1],$_[2].. $^a,$^b..
$a,$b - Just params to anonymous block
- $/ Object with results of last regex match
$1,$2,$3... $1,$2,$3...
$& $MATCH $<>
$` $PREMATCH substr based on $/.from
$' $POSTMATCH substr based on $/.to
$+ - But info can now be retrieved from $/
$^N $*MOST_RECENT_CAPTURED_MATCH ...or some such.
or $/[*-$n] ...or omit
@- $1.start, etc
@+ $1.end, etc.
%! -
$[ - This feature has been removed
$* - Deprecated long ago
$# - Deprecated long ago
$^H - These were only ever internal anyway
%^H -
- $! Current exception (see L<S04-control>)
$! $ERRNO $OS_ERROR - Use shiny new $!
$? $CHILD_ERROR - Use shiny new $!
$@ $EVAL_ERROR - Use shiny new $!
$^E - Use shiny new $!
$^S -
$. $NR $*IN.input_record_number()
$/ $RS $*IN.input_record_separator()
$| $*OUT.autoflush()
$, $OFS $*OUT.output_field_separator()
$\ $*OUT.output_record_separator()
$" $LIST_SEPARATOR -
$; $SUBSEP -
$$ $PID $*PID
$< $UID $*UID Real UID (User ID)
$( $GID $*GID Real GID (Group ID)
$> $EUID $*EUID Effective UID
$) $EGID $*EGID Effective GID
$0 $PROGRAM_NAME $*PROGRAM_NAME
$^C $COMPILING $*COMPILING
$^D $DEBUGGING $*DEBUGGING
$^F $SYS_FD_MAX $*SYS_FD_MAX ...or some such
$^I $INPLACE_EDIT $*INPLACE_EDIT ...or some such
$^M $*EMERGENCY_MEMORY ...or some such (or omit)
$^O $OSNAME $*OSNAME ...or some such
$^P $PERLDB $*PERLDB ...or some such
$^R $*LAST_REGEXP_CODE_RESULT ...or some such. Or omit.
$^T $BASETIME $*INITTIME A Temporal::Instant object
$^V $] $?PERL.version
$^W $*WARNINGS (if any dynamic control needed)
${^WARNING_BITS} $?WARNINGS
$^X $*EXECUTABLE_NAME ...or some such
ARGV $*ARGFILE Note the P6 idiom for this handle:
for lines() {
# each time through loop
# proc a line from files named in ARGS
}
@ARGV @*ARGS
ARGVOUT TBD
$ARGV TBD
@F @_
%ENV %*ENV
@INC @*INC (but not for std library modules)
%INC %*INC (maybe, if needed)
%SIG event filters plus exception translation
$SIG{__WARN__} $*ON_WARN
$SIG{__DIE__} $*ON_DIE
${^OPEN} - This was internal; forget it
次の項目はまだ定義されない、しかし定義される必要があるだろう。
30、このセクションが完全に空白になるまで、このラインを削除するな。
我々は同じくトップでのテーブルで $* 社を、 S19 とすぐに上のテーブル、同じく上の表の% * INC に @ * 社を持っているように思われる。
$? LANG と $ * LANG 変数は(共に S02 で)同じく紛らわしい。
これらは Perl5 to Perl6 の変換表に入る:
Perl6 Perl5 ----- ----------------------------------------- - $% $FORMAT_PAGE_NUMBER - HANDLE->format_page_number(EXPR) - $= $FORMAT_LINES_PER_PAGE - HANDLE->format_lines_per_page(EXPR) - $- $FORMAT_LINES_LEFT - HANDLE->format_lines_left(EXPR) - $~ $FORMAT_NAME - HANDLE->format_name(EXPR) - $^ $FORMAT_TOP_NAME - HANDLE->format_top_name(EXPR) - $: $FORMAT_LINE_BREAK_CHARACTERS - IO::Handle->format_line_break_characters - $^L $FORMAT_FORMFEED - IO::Handle->format_formfeed - $^A $ACCUMULATOR
${^ENCODING}変数 - S32/Str.pod がこれが $? であることをほのめかすEnc $? NF - unicode 正規化フォーム $ {^ UNICODE }変数
$ {^汚点}伝染しやすいトレイト仕様、変数、どちらかは、とりわけ、係争中だ
どうか perl6 - 言語にエラーとフィードバックをポストしてくれ。 もしあなたが一般的なリストを作っているなら、どうかトピックによるメッセージを分離してくれ。