タイトル

 [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つの変数を見せている表によって後に続かれる。

概観

(同じく「twigils」として知られている)第二のシギル

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;
 }
 

Perl5 to Perl6 の特別な変数翻訳

もし円柱がその中に " " を持っているなら、それはその項目が 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 で)同じく紛らわしい。

Form.pm

これらは 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
 

S15 - unicode.pod

${^ENCODING}変数 - S32/Str.pod がこれが $? であることをほのめかすEnc $? NF - unicode 正規化フォーム $ {^ UNICODE }変数

伝染しやすいトレイト仕様

$ {^汚点}伝染しやすいトレイト仕様、変数、どちらかは、とりわけ、係争中だ

付加

どうか perl6 - 言語にエラーとフィードバックをポストしてくれ。 もしあなたが一般的なリストを作っているなら、どうかトピックによるメッセージを分離してくれ。