Perl 6
Perl Lookup Table: Revision 22
"Index"[Perl Tablets] - Chapter "0:Intr"[Perl Table Intro], "1:Hist"[Perl History Table], "2:Design"[Perl Language Design Table], "3:Var"[Perl Variables Table], "4:Op"[Perl Operators Table], 5:IO, 6:{}, 7:Sub, 8:OOP, 9:Rx - Appendix "A:Index"[Perl Table Index], *"B:Tables"[Perl Lookup Table]*, "C:Best of"[Best Of Perl Table], "D:Delta"[Perl Delta Table], "E:Links"[Perl Links Table]

----

{toc: }

^^ Variables

^^^ Twigils

, or secondary sigils. They follow after a $ (scalar), @ (array) or % (hash) primary sigil, and mark special namespaces or variables with special meanings and properties.

> $foo . . . ordinary scoping (no twigil)
> $.foo. . . object attribute public accessor
> $!foo. . . object attribute private storage
> $^foo . . self-declared formal positional parameter
> $:foo . . .self-declared formal named parameter
> $*foo . . .contextualizable global variable
> $?foo . . .compiler hint variable
> $=foo . . .pod variable
> $<foo> . .match variable, short for $/<foo> or even $/{'foo'}
> $~foo . . .the foo sublanguage seen by the parser at this lexical spot

^^^ Special Variables

> $/ . . . . . . . . . last created match object of this block
> $<...> . . . . . . alias to named capture, see Twigils above
> $0 .. $9 . . . . . alias to positional capture (like in P5)
> @(). . . . . . . . array that holds $0 .. $9 and rest and positional submatches
> $! . . . . . . . . . error msg
> -
> $*ARGS . . . . . Arguments (Parameter) to a program (script), formerly @ARGV
> $*IN . . . . . . . standard input handle (command line mostly)
> $*OUT. . . . . . standard output (command line mostly)
> $*ERR . . . . . . standard error output (command line mostly)
> $*PERL . . . . . perl version running under
> @*INC. . . . . . include pathes (but not for std library modules), formerly @INC
> $*KERNEL. . . . operating system running under
> $*PID . . . . . . ID of the running process,
> $*GID . . . . . . real global ID of the running process owner, formerly @(
> $*UID . . . . . . real user ID of the running process owner (user), formerly @<
> $*EGID . . . . . effective global ID, formerly @)
> $*EUID . . . . . effective user ID, formerly @>
> $*ON_WARN . . , formerly $SIG{__WARN__}
> $*ON_DIE . . . . , formerly $SIG{__DIE__}
> %*ENV . . . . . . , formerly %ENV
> $*CWD . . . Str . . current working directory
> $*COMPILING . . . .
> $*DEBUGGING . . . .
> -
> $?KERNEL . . . . for which operating System was this program compiled?
> $?PERL . . . . . . SoftwarePackage # Which Perl am I compiled for?, $?PERL.version for formerly $^V $]
> $?CLASS. . . . . current class
> @?BLOCK . . . . reference to current block
> $?LINE . . . . . . current line number
> -
> @=COMMENT . All the comment blocks in the file
> $=DATA. . . . . data block handle (=begin DATA ... =end)
> @=DATA . . . . Same as above, but array
> -
> $~MAIN . . . the current main language (e.g. Perl statements)
> $~Q . . . . . .the current root of quoting language
> $~Quasi . . . the current root of quasiquoting language
> $~Regex . . .the current root of regex language
> $~Trans . . . the current root of transliteration language
> $~P5Regex . the current root of the Perl regex language

^^^ Object Types

Any scalar variable (arrays and hashes are just collections of scalars) can hold any type of data. Nevertheless Perl knows for many data types specific classes (known as data types) that can handle them.

> Bit . . . . . Perl single bit (allows traits, aliasing, undef, etc.)
> Int . . . . . Perl integer (allows Inf/NaN, arbitrary precision, etc.)
> Str . . . . . Perl string (finite sequence of Unicode characters)
> Num . . . . Perl floating point number
> Complex . . Perl complex number
> Bool . . . . Perl boolean
> Exception . Perl exception
> Code . . . . Base class for all executable objects
> Block . . . . Executable objects that have lexical scopes
> List . . . . . Lazy Perl list (composed of immutables and iterators)
> Seq . . . . . Completely evaluated (hence immutable) sequence
> Range . . . A pair of Ordered endpoints; generates immutables when iterated
> Set . . . . . Unordered collection of values that allows no duplicates
> Bag . . . . . Unordered collection of values that allows duplicates
> Junction . . Single value that could be one of several alternatives
> Pair . . . . . A single key-to-value association
> Mapping . . Set of Pairs with no duplicate keys
> Signature . .Function parameters (left-hand side of a binding)
> Capture . . .Function call arguments (right-hand side of a binding)
> Blob . . . . . An undifferentiated mass of bits

^^^ low level data types

This is more low level than the last table. These types are more meant to give the compiler optimizing hints.

> int1
> int2
> int4
> int8
> int16
> int32 (aka int on 32-bit machines)
> int64 (aka int on 64-bit machines)
> uint1 (aka bit)
> uint2
> uint4
> uint8 (aka byte)
> uint16
> uint32
> uint64
> num32
> num64 (aka num on most architectures)
> num128
> complex32
> complex64 (aka complex on most architectures)
> complex128
> Str

^^ Operators

^^^ Table of precedence

> A . Level . . . . . . . . . . . . Examples
> = . =========== . . . ==================
> N . Terms . . . . . . . . . 42 3.14 "eek" qq["foo"] $x :!verbose @$array
> L . Method postfix. . . . meth .+ .? .* .() .[] .{} .<> .«» .:: .= .^ .:
> N . Autoincrement. . . . ++ --
> R . Exponentiation. . . . **
> L . Symbolic unary. . . . ! + - ~ ? | +^ ~^ ?^ ^
> L . Multiplicative . . . . . * / % +& +< +> ~& ~< ~> ?& div mod
> L . Additive . . . . . . . . + - +| +^ ~| ~^ ?| ?^
> L . Replication. . . . . . . x xx
> X . Concatenation . . . . ~
> X . Junctive and . . . . . & also
> X . Junctive or . . . . . . | ^
> L . Named unary . . . . . sleep abs sin temp let
> N . Nonchaining infix. . . but does <=> leg cmp .. ..^ ^.. ^..^
> C . Chaining infix . . . . . != == < <= > >= eq ne lt le gt ge ~~ === eqv !eqv
> X . Tight and. . . . . . . . &&
> X . Tight or. . . . . . . . . || ^^ // min max
> R . Conditional. . . . . . . ?? !! ff fff
> R . Item assignment . . . = := ::= => += -= **= xx= .=
> L . Loose unary . . . . . . true not
> X . Comma operator . . . , p5=> :
> X . List infix. . . . . . . . . Z minmax X X~ X* Xeqv ...
> R . List prefix. . . . . . . . print push say die map substr ... [+] [*] any $ @
> X . Loose and . . . . . . . and andthen
> X . Loose or . . . . . . . . or xor orelse
> X . Sequencer. . . . . . . <==, ==>, <<==, ==>>
> N . Terminator. . . . . . . ; {...}, unless, extra ), ], }

| | Assoc | Meaning of $a ! $b ! $c |
| L | left | ($a ! $b) ! $c |
| R | right | $a ! ($b ! $c) |
| N | non | ILLEGAL |
| C | chain | ($a ! $b) and ($b ! $c) |
| X | list | infix:<!>($a; $b; $c) |

^^^ File Teste Ops

> :r . . . file is readable by effective uid/gid.
> :w. . . file is writeable by effective uid/gid.
> :x . . . file is executable by effective uid/gid.
> :o . . . file is owned by effective uid.
> .
> :R . . . file is readable by real uid/gid.
> :W . . . file is writeable by real uid/gid.
> :X . . . file is executable by real uid/gid.
> :O . . . file is owned by real uid.
> .
> :e . . . file exists
> :z . . . file has size equal to 0 (an empty file).
> :s . . . file has size greater than 0 (returns size in bytes)
> .
> :f . . . file is a plain file.
> :d . . . file is a directory.
> :l . . . file is a symbolic link.
> :p . . . file is a named pipe (FIFO), or filehandle is a pipe.
> :S . . . file is a socket.
> :b . . . file is a block special file.
> :c . . . file is a character special file.
> :t . . . filehandle is opened to a tty.
> .
> :u . . . file has setuid bit set.
> :g . . . file has setgid bit set.
> :k . . . file has sticky bit set.
> .
> :T . . . file is an ASCII text file (heuristic guess).
> :B . . . file is a binary data file (opposite of :T).
> .
> :M . . . Script start time minus file modification time, in days.
> :A . . . Same for access time.
> :C . . . Same for inode change time (Unix, may differ for other platforms)

^^^ Metaoperators

They appear mostly before regular operators and give them different meaning or greater range.
In the example V stands for Value, L for left Value, and R for right. A number is the array index.

> {{<op>=}} . . . self assign . . . known from P5, {{<var1> =<op> <var2>}} equals {{<var1> = <var1> <op> <var2>}}
> {{>><op>}} . . hyper . . . processes arrays in parallel or applies a single value to all array elements; @E = L1 op R1, L2 op R2, ...;
> {{<<<op>}} . . hyper . . . processes arrays in parallel or applies a single value to all array elements; @E = L1 op R1, L2 op R2, ...;<br />
> {{[<op>]}}. . . reduction . . applies the operator between all elements of an array; $result = V1 op V2 op ...;<br />
> {{[\<op>]}} . . reduction . . . applies above reduction to a series of lists made of array slices ranging in length from 1 to the complete length of the original list; @result = V1, V1 op V2, V1 op V2 op V3, ...;<br />
> {{R<op>}} . . . reverse . . . reverses the operator<br />
> {{X<op>}} . . . combinator . . .performs the operator to all the pairs of the Cartesian product of two arrays; @result = L1 op R1, L1 op R2, L2 op R1, L2 op R2 }}

^^^ Unicode operators

The two hyper operators can be written with the Unicode "chevron" signs (also documented as "French Quotes") or with double less than or greater than signs (documented as "Texas Quotes").

> « aka {{<<}}
> » aka {{>>}}

^^^ Smartmatch

| $_ | X | Type of Match Wanted | What to use on the right |
| Array | Num | array element truth | .[X] |
| Array | Num | array contains number | *,X,* |
| Array | Str | array contains string | *,X,* |
| Array | Seq | array begins with seq | X,* |
| Array | Seq | array contains seq | *,X,* |
| Array | Seq | array ends with seq | *,X |
| Hash | Str | hash element truth | .{X} |
| Hash | Str | hash key existence | .{X}:exists |
| Hash | Num | hash element truth | .{X} |
| Hash | Num | hash key existence | .{X}:exists |
| Buf | Int | buffer contains int | .match(X) |
| Str | Char | string contains char | .match(X) |
| Str | Str | string contains string | .match(X) |
| Array | Scalar | array contains item | .any === X |
| Str | Array | array contains | string X.any |
| Num | Array | array contains | number X.any |
| Scalar | Array | array contains object | X.any |
| Hash | Array | hash slice exists | .{X.all}:exists .{X.any}:exists |
| Set | Set | subset relation | .{X}:exists |
| Set | Hash | subset relation | .{X}:exists |
| Any | Set | subset relation | .Set.{X}:exists |
| Any | Hash | subset relation | .Set.{X}:exists |
| Any | Set | superset relation | X.{$_}:exists |
| Any | Hash | superset relation | X.{$_}:exists |
| Any | Set | sets intersect | .{X.any}:exists |
| Set | Array | subset relation | X,* # (conjectured) |
| Array | Regex | match array as string | .Cat.match(X); cat(@$_).match(X) |

^^^ Quoting Ops and Adverbs

| Short | Long | Meaning |
| :x | :exec | Execute as command and return results |
| :w | :words | Split result on words (no quote protection) |
| :ww | :quotewords | Split result on words (with quote protection) |
| :q | :single | Interpolate \\, \q and \' (or whatever) |
| :qq | :double | Interpolate with :s, :a, :h, :f, :c, :b |
| :s | :scalar | Interpolate $ vars |
| :a | :array | Interpolate @ vars |
| :h | :hash | Interpolate % vars |
| :f | :function | Interpolate & calls |
| :c | :closure | Interpolate {...} expressions |
| :b | :backslash | Interpolate \n, \t, etc. (implies :q at least) |
| :to | :heredoc | Parse result as heredoc terminator |
| | :regex | Parse as regex |
| | :subst | Parse as substitution |
| | :trans | Parse as transliteration |
| | :code | Quasiquoting |

^^ Text Processing

^^^ Escape Sequence

Make control chars when used in a double quoted string.

> \a . . . . . . . . BELL
> \b . . . . . . . . BACKSPACE
> \e . . . . . . . . ESCAPE
> \f . . . . . . . . FORM FEED
> \n . . . . . . . . LINE FEED
> \r . . . . . . . . CARRIAGE RETURN
> \t . . . . . . . . TAB

^^^ Rule primitives

> \0[ . . . ] Match a character given in octal (brackets optional).
> \b Match a word boundary.
> \B Match when not on a word boundary.
> \c[ . . . ] Match a named character or control character.
> \C[ . . . ] Match any character except the bracketed named or control character.
> \d Match a digit.
> \D Match a nondigit.
> \e Match an escape character.
> \E Match anything but an escape character.
> \f Match the form feed character.
> \F Match anything but a form feed.
> \n Match a (logical) newline.
> \N Match anything but a (logical) newline.
> \h Match horizontal whitespace.
> \H Match anything but horizontal whitespace.
> \L[ . . . ] Everything within the brackets is lowercase.
> \Q[ . . . ] All metacharacters within the brackets match as literal characters.
> \r Match a return.
> \R Match anything but a return.
> \s Match any whitespace character.
> \S Match anything but whitespace.
> \t Match a tab.
> \T Match anything but a tab.
> \U[ . . . ] Everything within the brackets is uppercase.
> \v Match vertical whitespace.
> \V Match anything but vertical whitespace.
> \w Match a word character (Unicode alphanumeric plus "_").
> \W Match anything but a word character.
> \x[ . . . ] Match a character given in hexadecimal (brackets optional).
> \X[ . . . ] Match anything but the character given in hexadecimal (brackets optional).

^^ Flow Control

^^^ Closure Traits

in every block can be inserted several special named blocks that are started at certain times. Because they are treated as part of a block object, they are called traits. Those marked with a * can also be used within an expression.

> BEGIN {...}* at compile time, ASAP, only ever runs once
> CHECK {...}* at compile time, ALAP, only ever runs once

> INIT {...}* at run time, ASAP, only ever runs once
> END {...} at run time, ALAP, only ever runs once

> START {...}* on first ever execution, once per closure clone
> ENTER {...}* at every block entry time, repeats on loop blocks.
> LEAVE {...} at every block exit time
> KEEP {...} at every successful block exit, part of LEAVE queue
> UNDO {...} at every unsuccessful block exit, part of LEAVE queue

> FIRST {...}* at loop initialization time, before any ENTER
> NEXT {...} at loop continuation time, before any LEAVE
> LAST {...} at loop termination time, after any LEAVE

> PRE {...} assert precondition at every block entry, before ENTER
> POST {...} assert postcondition at every block exit, after LEAVE

> CATCH {...} catch exceptions, before LEAVE
> CONTROL {...} catch control exceptions, before LEAVE

----

"Index"[Perl Tablets] - Chapter "0:Intr"[Perl Table Intro], "1:Hist"[Perl History Table], "2:Design"[Perl Language Design Table], "3:Var"[Perl Variables Table], "4:Op"[Perl Operators Table], 5:IO, 6:{}, 7:Sub, 8:OOP, 9:Rx - Appendix "A:Index"[Perl Table Index], *"B:Tables"[Perl Lookup Table]*, "C:Best of"[Best Of Perl Table], "D:Delta"[Perl Delta Table], "E:Links"[Perl Links Table]

----


Upload Files

Click "Browse" to find the file you want to upload. When you click "Upload file" your file will be uploaded and added to the list of attachments for this page.

Maximum file size: 50MB

 
 
 
File Name Author Date Uploaded Size

Save Page As

Enter a meaningful and distinctive title for your page.

Page Title:

Tip: You'll be able to find this page later by using the title you choose.

Page Already Exists

There is already a page named XXX. Would you like to:

Save with a different name:

Save the page with the name "XXX"

Append your text to the bottom of the existing page named: "XXX"

Upload Files

Click "Browse" to find the file you want to upload. When you click "Add file" this file will be added to the list of attachments for this page, and uploaded when you save the page.

 
 
 
Add Tags

Enter a tag and click "Add tag". The tag will be saved when you save the page.

Tag: 

Suggestions: