home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Magazin: Amiga-CD 1996 July
/
AMIGA_1996_7.BIN
/
ausgabe_7_96
/
pd-programmierung
/
perl5_002bin.lha
/
man
/
catp
/
perlop.0
< prev
next >
Wrap
Text File
|
1996-03-02
|
93KB
|
1,519 lines
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
NNNNAAAAMMMMEEEE
perlop - Perl operators and precedence
SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
Perl operators have the following associativity and
precedence, listed from highest precedence to lowest.
Note that all operators borrowed from C keep the same
precedence relationship with each other, even where C's
precedence is slightly screwy. (This makes learning Perl
easier for C folks.) With very few exceptions, these all
operate on scalar values only, not array values.
lllleeeefffftttt tttteeeerrrrmmmmssss aaaannnndddd lllliiiisssstttt ooooppppeeeerrrraaaattttoooorrrrssss ((((lllleeeeffffttttwwwwaaaarrrrdddd))))
lllleeeefffftttt ---->>>>
nnnnoooonnnnaaaassssssssoooocccc ++++++++ --------
rrrriiiigggghhhhtttt ********
rrrriiiigggghhhhtttt !!!! ~~~~ \\\\ aaaannnndddd uuuunnnnaaaarrrryyyy ++++ aaaannnndddd ----
lllleeeefffftttt ====~~~~ !!!!~~~~
lllleeeefffftttt **** //// %%%% xxxx
lllleeeefffftttt ++++ ---- ....
lllleeeefffftttt <<<<<<<< >>>>>>>>
nnnnoooonnnnaaaassssssssoooocccc nnnnaaaammmmeeeedddd uuuunnnnaaaarrrryyyy ooooppppeeeerrrraaaattttoooorrrrssss
nnnnoooonnnnaaaassssssssoooocccc <<<< >>>> <<<<==== >>>>==== lllltttt ggggtttt lllleeee ggggeeee
nnnnoooonnnnaaaassssssssoooocccc ======== !!!!==== <<<<====>>>> eeeeqqqq nnnneeee ccccmmmmpppp
lllleeeefffftttt &&&&
lllleeeefffftttt |||| ^^^^
lllleeeefffftttt &&&&&&&&
lllleeeefffftttt ||||||||
nnnnoooonnnnaaaassssssssoooocccc ........
rrrriiiigggghhhhtttt ????::::
rrrriiiigggghhhhtttt ==== ++++==== ----==== ****==== eeeettttcccc....
lllleeeefffftttt ,,,, ====>>>>
nnnnoooonnnnaaaassssssssoooocccc lllliiiisssstttt ooooppppeeeerrrraaaattttoooorrrrssss ((((rrrriiiigggghhhhttttwwwwaaaarrrrdddd))))
rrrriiiigggghhhhtttt nnnnooootttt
lllleeeefffftttt aaaannnndddd
lllleeeefffftttt oooorrrr xxxxoooorrrr
In the following sections, these operators are covered in
precedence order.
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
TTTTeeeerrrrmmmmssss aaaannnndddd LLLLiiiisssstttt OOOOppppeeeerrrraaaattttoooorrrrssss ((((LLLLeeeeffffttttwwwwaaaarrrrdddd))))
Any TERM is of highest precedence of Perl. These includes
variables, quote and quotelike operators, any expression
in parentheses, and any function whose arguments are
parenthesized. Actually, there aren't really functions in
this sense, just list operators and unary operators
behaving as functions because you put parentheses around
the arguments. These are all documented in the _p_e_r_l_f_u_n_c
manpage.
If any list operator (_p_r_i_n_t_(_), etc.) or any unary operator
(_c_h_d_i_r_(_), etc.) is followed by a left parenthesis as the
13/Feb/96 perl 5.002 with 1
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
next token, the operator and arguments within parentheses
are taken to be of highest precedence, just like a normal
function call.
In the absence of parentheses, the precedence of list
operators such as pppprrrriiiinnnntttt, ssssoooorrrrtttt, or cccchhhhmmmmoooodddd is either very
high or very low depending on whether you look at the left
side of operator or the right side of it. For example, in
@@@@aaaarrrryyyy ==== ((((1111,,,, 3333,,,, ssssoooorrrrtttt 4444,,,, 2222))));;;;
pppprrrriiiinnnntttt @@@@aaaarrrryyyy;;;; #### pppprrrriiiinnnnttttssss 1111333322224444
the commas on the right of the sort are evaluated before
the sort, but the commas on the left are evaluated after.
In other words, list operators tend to gobble up all the
arguments that follow them, and then act like a simple
TERM with regard to the preceding expression. Note that
you have to be careful with parens:
#### TTTThhhheeeesssseeee eeeevvvvaaaalllluuuuaaaatttteeee eeeexxxxiiiitttt bbbbeeeeffffoooorrrreeee ddddooooiiiinnnngggg tttthhhheeee pppprrrriiiinnnntttt::::
pppprrrriiiinnnntttt(((($$$$ffffoooooooo,,,, eeeexxxxiiiitttt))));;;; #### OOOObbbbvvvviiiioooouuuussssllllyyyy nnnnooootttt wwwwhhhhaaaatttt yyyyoooouuuu wwwwaaaannnntttt....
pppprrrriiiinnnntttt $$$$ffffoooooooo,,,, eeeexxxxiiiitttt;;;; #### NNNNoooorrrr iiiissss tttthhhhiiiissss....
#### TTTThhhheeeesssseeee ddddoooo tttthhhheeee pppprrrriiiinnnntttt bbbbeeeeffffoooorrrreeee eeeevvvvaaaalllluuuuaaaattttiiiinnnngggg eeeexxxxiiiitttt::::
((((pppprrrriiiinnnntttt $$$$ffffoooooooo)))),,,, eeeexxxxiiiitttt;;;; #### TTTThhhhiiiissss iiiissss wwwwhhhhaaaatttt yyyyoooouuuu wwwwaaaannnntttt....
pppprrrriiiinnnntttt(((($$$$ffffoooooooo)))),,,, eeeexxxxiiiitttt;;;; #### OOOOrrrr tttthhhhiiiissss....
pppprrrriiiinnnntttt (((($$$$ffffoooooooo)))),,,, eeeexxxxiiiitttt;;;; #### OOOOrrrr eeeevvvveeeennnn tttthhhhiiiissss....
Also note that
pppprrrriiiinnnntttt (((($$$$ffffoooooooo &&&& 222255555555)))) ++++ 1111,,,, """"\\\\nnnn"""";;;;
probably doesn't do what you expect at first glance. See
the section on _N_a_m_e_d _U_n_a_r_y _O_p_e_r_a_t_o_r_s for more discussion
of this.
Also parsed as terms are the ddddoooo {{{{}}}} and eeeevvvvaaaallll {{{{}}}} constructs,
as well as subroutine and method calls, and the anonymous
constructors [[[[]]]] and {{{{}}}}.
See also the section on _Q_u_o_t_e _a_n_d _Q_u_o_t_e_l_i_k_e _O_p_e_r_a_t_o_r_s
toward the end of this section, as well as the section on
_I_/_O _O_p_e_r_a_t_o_r_s.
TTTThhhheeee AAAArrrrrrrroooowwww OOOOppppeeeerrrraaaattttoooorrrr
Just as in C and C++, "---->>>>" is an infix dereference
operator. If the right side is either a [[[[............]]]] or {{{{............}}}}
subscript, then the left side must be either a hard or
symbolic reference to an array or hash (or a location
capable of holding a hard reference, if it's an lvalue
(assignable)). See the _p_e_r_l_r_e_f manpage.
Otherwise, the right side is a method name or a simple
13/Feb/96 perl 5.002 with 2
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
scalar variable containing the method name, and the left
side must either be an object (a blessed reference) or a
class name (that is, a package name). See the _p_e_r_l_o_b_j
manpage.
AAAAuuuuttttooooiiiinnnnccccrrrreeeemmmmeeeennnntttt aaaannnndddd AAAAuuuuttttooooddddeeeeccccrrrreeeemmmmeeeennnntttt
"++" and "--" work as in C. That is, if placed before a
variable, they increment or decrement the variable before
returning the value, and if placed after, increment or
decrement the variable after returning the value.
The autoincrement operator has a little extra built-in
magic to it. If you increment a variable that is numeric,
or that has ever been used in a numeric context, you get a
normal increment. If, however, the variable has only been
used in string contexts since it was set, and has a value
that is not null and matches the pattern ////^^^^[[[[aaaa----zzzzAAAA----
ZZZZ]]]]****[[[[0000----9999]]]]****$$$$////, the increment is done as a string, preserving
each character within its range, with carry:
pppprrrriiiinnnntttt ++++++++(((($$$$ffffoooooooo ==== ''''99999999''''))));;;; #### pppprrrriiiinnnnttttssss ''''111100000000''''
pppprrrriiiinnnntttt ++++++++(((($$$$ffffoooooooo ==== ''''aaaa0000''''))));;;; #### pppprrrriiiinnnnttttssss ''''aaaa1111''''
pppprrrriiiinnnntttt ++++++++(((($$$$ffffoooooooo ==== ''''AAAAzzzz''''))));;;; #### pppprrrriiiinnnnttttssss ''''BBBBaaaa''''
pppprrrriiiinnnntttt ++++++++(((($$$$ffffoooooooo ==== ''''zzzzzzzz''''))));;;; #### pppprrrriiiinnnnttttssss ''''aaaaaaaaaaaa''''
The autodecrement operator is not magical.
EEEExxxxppppoooonnnneeeennnnttttiiiiaaaattttiiiioooonnnn
Binary "**" is the exponentiation operator. Note that it
binds even more tightly than unary minus, so -2**4 is
-(2**4), not (-2)**4. (This is implemented using C's
_p_o_w(3) function, which actually works on doubles
internally.)
SSSSyyyymmmmbbbboooolllliiiicccc UUUUnnnnaaaarrrryyyy OOOOppppeeeerrrraaaattttoooorrrrssss
Unary "!" performs logical negation, i.e. "not". See also
nnnnooootttt for a lower precedence version of this.
Unary "-" performs arithmetic negation if the operand is
numeric. If the operand is an identifier, a string
consisting of a minus sign concatenated with the
identifier is returned. Otherwise, if the string starts
with a plus or minus, a string starting with the opposite
sign is returned. One effect of these rules is that
----bbbbaaaarrrreeeewwwwoooorrrrdddd is equivalent to """"----bbbbaaaarrrreeeewwwwoooorrrrdddd"""".
Unary "~" performs bitwise negation, i.e. 1's complement.
Unary "+" has no effect whatsoever, even on strings. It
is useful syntactically for separating a function name
from a parenthesized expression that would otherwise be
13/Feb/96 perl 5.002 with 3
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
interpreted as the complete list of function arguments.
(See examples above under the section on _L_i_s_t _O_p_e_r_a_t_o_r_s.)
Unary "\" creates a reference to whatever follows it. See
the _p_e_r_l_r_e_f manpage. Do not confuse this behavior with
the behavior of backslash within a string, although both
forms do convey the notion of protecting the next thing
from interpretation.
BBBBiiiinnnnddddiiiinnnngggg OOOOppppeeeerrrraaaattttoooorrrrssss
Binary "=~" binds a scalar expression to a pattern match.
Certain operations search or modify the string $$$$____ by
default. This operator makes that kind of operation work
on some other string. The right argument is a search
pattern, substitution, or translation. The left argument
is what is supposed to be searched, substituted, or
translated instead of the default $$$$____. The return value
indicates the success of the operation. (If the right
argument is an expression rather than a search pattern,
substitution, or translation, it is interpreted as a
search pattern at run time. This is less efficient than
an explicit search, since the pattern must be compiled
every time the expression is evaluated--unless you've used
////oooo.)
Binary "!~" is just like "=~" except the return value is
negated in the logical sense.
MMMMuuuullllttttiiiipppplllliiiiccccaaaattttiiiivvvveeee OOOOppppeeeerrrraaaattttoooorrrrssss
Binary "*" multiplies two numbers.
Binary "/" divides two numbers.
Binary "%" computes the modulus of the two numbers.
Binary "x" is the repetition operator. In a scalar
context, it returns a string consisting of the left
operand repeated the number of times specified by the
right operand. In a list context, if the left operand is
a list in parens, it repeats the list.
pppprrrriiiinnnntttt ''''----'''' xxxx 88880000;;;; #### pppprrrriiiinnnntttt rrrroooowwww ooooffff ddddaaaasssshhhheeeessss
pppprrrriiiinnnntttt """"\\\\tttt"""" xxxx (((($$$$ttttaaaabbbb////8888)))),,,, '''' '''' xxxx (((($$$$ttttaaaabbbb%%%%8888))));;;; #### ttttaaaabbbb oooovvvveeeerrrr
@@@@oooonnnneeeessss ==== ((((1111)))) xxxx 88880000;;;; #### aaaa lllliiiisssstttt ooooffff 88880000 1111''''ssss
@@@@oooonnnneeeessss ==== ((((5555)))) xxxx @@@@oooonnnneeeessss;;;; #### sssseeeetttt aaaallllllll eeeelllleeeemmmmeeeennnnttttssss ttttoooo 5555
13/Feb/96 perl 5.002 with 4
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
AAAAddddddddiiiittttiiiivvvveeee OOOOppppeeeerrrraaaattttoooorrrrssss
Binary "+" returns the sum of two numbers.
Binary "-" returns the difference of two numbers.
Binary "." concatenates two strings.
SSSShhhhiiiifffftttt OOOOppppeeeerrrraaaattttoooorrrrssss
Binary "<<" returns the value of its left argument shifted
left by the number of bits specified by the right
argument. Arguments should be integers.
Binary ">>" returns the value of its left argument shifted
right by the number of bits specified by the right
argument. Arguments should be integers.
NNNNaaaammmmeeeedddd UUUUnnnnaaaarrrryyyy OOOOppppeeeerrrraaaattttoooorrrrssss
The various named unary operators are treated as functions
with one argument, with optional parentheses. These
include the filetest operators, like ----ffff, ----MMMM, etc. See the
_p_e_r_l_f_u_n_c manpage.
If any list operator (_p_r_i_n_t_(_), etc.) or any unary operator
(_c_h_d_i_r_(_), etc.) is followed by a left parenthesis as the
next token, the operator and arguments within parentheses
are taken to be of highest precedence, just like a normal
function call. Examples:
cccchhhhddddiiiirrrr $$$$ffffoooooooo |||||||| ddddiiiieeee;;;; #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) |||||||| ddddiiiieeee
cccchhhhddddiiiirrrr(((($$$$ffffoooooooo)))) |||||||| ddddiiiieeee;;;; #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) |||||||| ddddiiiieeee
cccchhhhddddiiiirrrr (((($$$$ffffoooooooo)))) |||||||| ddddiiiieeee;;;; #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) |||||||| ddddiiiieeee
cccchhhhddddiiiirrrr ++++(((($$$$ffffoooooooo)))) |||||||| ddddiiiieeee;;;; #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) |||||||| ddddiiiieeee
but, because * is higher precedence than ||:
cccchhhhddddiiiirrrr $$$$ffffoooooooo **** 22220000;;;; #### cccchhhhddddiiiirrrr (((($$$$ffffoooooooo **** 22220000))))
cccchhhhddddiiiirrrr(((($$$$ffffoooooooo)))) **** 22220000;;;; #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) **** 22220000
cccchhhhddddiiiirrrr (((($$$$ffffoooooooo)))) **** 22220000;;;; #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) **** 22220000
cccchhhhddddiiiirrrr ++++(((($$$$ffffoooooooo)))) **** 22220000;;;; #### cccchhhhddddiiiirrrr (((($$$$ffffoooooooo **** 22220000))))
rrrraaaannnndddd 11110000 **** 22220000;;;; #### rrrraaaannnndddd ((((11110000 **** 22220000))))
rrrraaaannnndddd((((11110000)))) **** 22220000;;;; #### ((((rrrraaaannnndddd 11110000)))) **** 22220000
rrrraaaannnndddd ((((11110000)))) **** 22220000;;;; #### ((((rrrraaaannnndddd 11110000)))) **** 22220000
rrrraaaannnndddd ++++((((11110000)))) **** 22220000;;;; #### rrrraaaannnndddd ((((11110000 **** 22220000))))
See also the section on _L_i_s_t _O_p_e_r_a_t_o_r_s.
RRRReeeellllaaaattttiiiioooonnnnaaaallll OOOOppppeeeerrrraaaattttoooorrrrssss
Binary "<" returns true if the left argument is
numerically less than the right argument.
13/Feb/96 perl 5.002 with 5
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
Binary ">" returns true if the left argument is
numerically greater than the right argument.
Binary "<=" returns true if the left argument is
numerically less than or equal to the right argument.
Binary ">=" returns true if the left argument is
numerically greater than or equal to the right argument.
Binary "lt" returns true if the left argument is
stringwise less than the right argument.
Binary "gt" returns true if the left argument is
stringwise greater than the right argument.
Binary "le" returns true if the left argument is
stringwise less than or equal to the right argument.
Binary "ge" returns true if the left argument is
stringwise greater than or equal to the right argument.
EEEEqqqquuuuaaaalllliiiittttyyyy OOOOppppeeeerrrraaaattttoooorrrrssss
Binary "==" returns true if the left argument is
numerically equal to the right argument.
Binary "!=" returns true if the left argument is
numerically not equal to the right argument.
Binary "<=>" returns -1, 0, or 1 depending on whether the
left argument is numerically less than, equal to, or
greater than the right argument.
Binary "eq" returns true if the left argument is
stringwise equal to the right argument.
Binary "ne" returns true if the left argument is
stringwise not equal to the right argument.
Binary "cmp" returns -1, 0, or 1 depending on whether the
left argument is stringwise less than, equal to, or
greater than the right argument.
BBBBiiiittttwwwwiiiisssseeee AAAAnnnndddd
Binary "&" returns its operators ANDed together bit by
bit.
BBBBiiiittttwwwwiiiisssseeee OOOOrrrr aaaannnndddd EEEExxxxcccclllluuuussssiiiivvvveeee OOOOrrrr
Binary "|" returns its operators ORed together bit by bit.
Binary "^" returns its operators XORed together bit by
bit.
13/Feb/96 perl 5.002 with 6
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
CCCC----ssssttttyyyylllleeee LLLLooooggggiiiiccccaaaallll AAAAnnnndddd
Binary "&&" performs a short-circuit logical AND
operation. That is, if the left operand is false, the
right operand is not even evaluated. Scalar or list
context propagates down to the right operand if it is
evaluated.
CCCC----ssssttttyyyylllleeee LLLLooooggggiiiiccccaaaallll OOOOrrrr
Binary "||" performs a short-circuit logical OR operation.
That is, if the left operand is true, the right operand is
not even evaluated. Scalar or list context propagates
down to the right operand if it is evaluated.
The |||||||| and &&&&&&&& operators differ from C's in that, rather
than returning 0 or 1, they return the last value
evaluated. Thus, a reasonably portable way to find out
the home directory (assuming it's not "0") might be:
$$$$hhhhoooommmmeeee ==== $$$$EEEENNNNVVVV{{{{''''HHHHOOOOMMMMEEEE''''}}}} |||||||| $$$$EEEENNNNVVVV{{{{''''LLLLOOOOGGGGDDDDIIIIRRRR''''}}}} ||||||||
((((ggggeeeettttppppwwwwuuuuiiiidddd(((($$$$<<<<))))))))[[[[7777]]]] |||||||| ddddiiiieeee """"YYYYoooouuuu''''rrrreeee hhhhoooommmmeeeelllleeeessssssss!!!!\\\\nnnn"""";;;;
As more readable alternatives to &&&&&&&& and ||||||||, Perl provides
"and" and "or" operators (see below). The short-circuit
behavior is identical. The precedence of "and" and "or"
is much lower, however, so that you can safely use them
after a list operator without the need for parentheses:
uuuunnnnlllliiiinnnnkkkk """"aaaallllpppphhhhaaaa"""",,,, """"bbbbeeeettttaaaa"""",,,, """"ggggaaaammmmmmmmaaaa""""
oooorrrr ggggrrrriiiippppeeee(((()))),,,, nnnneeeexxxxtttt LLLLIIIINNNNEEEE;;;;
With the C-style operators that would have been written
like this:
uuuunnnnlllliiiinnnnkkkk((((""""aaaallllpppphhhhaaaa"""",,,, """"bbbbeeeettttaaaa"""",,,, """"ggggaaaammmmmmmmaaaa""""))))
|||||||| ((((ggggrrrriiiippppeeee(((()))),,,, nnnneeeexxxxtttt LLLLIIIINNNNEEEE))));;;;
RRRRaaaannnnggggeeee OOOOppppeeeerrrraaaattttoooorrrr
Binary ".." is the range operator, which is really two
different operators depending on the context. In a list
context, it returns an array of values counting (by ones)
from the left value to the right value. This is useful
for writing ffffoooorrrr ((((1111........11110000)))) loops and for doing slice
operations on arrays. Be aware that under the current
implementation, a temporary array is created, so you'll
burn a lot of memory if you write something like this:
ffffoooorrrr ((((1111 ........ 1111____000000000000____000000000000)))) {{{{
#### ccccooooddddeeee
}}}}
13/Feb/96 perl 5.002 with 7
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
In a scalar context, ".." returns a boolean value. The
operator is bistable, like a flip-flop, and emulates the
line-range (comma) operator of sssseeeedddd, aaaawwwwkkkk, and various
editors. Each ".." operator maintains its own boolean
state. It is false as long as its left operand is false.
Once the left operand is true, the range operator stays
true until the right operand is true, _A_F_T_E_R which the
range operator becomes false again. (It doesn't become
false till the next time the range operator is evaluated.
It can test the right operand and become false on the same
evaluation it became true (as in aaaawwwwkkkk), but it still
returns true once. If you don't want it to test the right
operand till the next evaluation (as in sssseeeedddd), use three
dots ("...") instead of two.) The right operand is not
evaluated while the operator is in the "false" state, and
the left operand is not evaluated while the operator is in
the "true" state. The precedence is a little lower than
|| and &&. The value returned is either the null string
for false, or a sequence number (beginning with 1) for
true. The sequence number is reset for each range
encountered. The final sequence number in a range has the
string "E0" appended to it, which doesn't affect its
numeric value, but gives you something to search for if
you want to exclude the endpoint. You can exclude the
beginning point by waiting for the sequence number to be
greater than 1. If either operand of scalar ".." is a
numeric literal, that operand is implicitly compared to
the $$$$.... variable, the current line number. Examples:
As a scalar operator:
iiiiffff ((((111100001111 ........ 222200000000)))) {{{{ pppprrrriiiinnnntttt;;;; }}}} #### pppprrrriiiinnnntttt 2222nnnndddd hhhhuuuunnnnddddrrrreeeedddd lllliiiinnnneeeessss
nnnneeeexxxxtttt lllliiiinnnneeee iiiiffff ((((1111 ........ ////^^^^$$$$////))));;;; #### sssskkkkiiiipppp hhhheeeeaaaaddddeeeerrrr lllliiiinnnneeeessss
ssss////^^^^////>>>> //// iiiiffff ((((////^^^^$$$$//// ........ eeeeooooffff(((())))))));;;; #### qqqquuuuooootttteeee bbbbooooddddyyyy
As a list operator:
ffffoooorrrr ((((111100001111 ........ 222200000000)))) {{{{ pppprrrriiiinnnntttt;;;; }}}} #### pppprrrriiiinnnntttt $$$$____ 111100000000 ttttiiiimmmmeeeessss
@@@@ffffoooooooo ==== @@@@ffffoooooooo[[[[$$$$[[[[ ........ $$$$####ffffoooooooo]]]];;;; #### aaaannnn eeeexxxxppppeeeennnnssssiiiivvvveeee nnnnoooo----oooopppp
@@@@ffffoooooooo ==== @@@@ffffoooooooo[[[[$$$$####ffffoooooooo----4444 ........ $$$$####ffffoooooooo]]]];;;; #### sssslllliiiicccceeee llllaaaasssstttt 5555 iiiitttteeeemmmmssss
The range operator (in a list context) makes use of the
magical autoincrement algorithm if the operaands are
strings. You can say
@@@@aaaallllpppphhhhaaaabbbbeeeetttt ==== ((((''''AAAA'''' ........ ''''ZZZZ''''))));;;;
to get all the letters of the alphabet, or
$$$$hhhheeeexxxxddddiiiiggggiiiitttt ==== ((((0000 ........ 9999,,,, ''''aaaa'''' ........ ''''ffff''''))))[[[[$$$$nnnnuuuummmm &&&& 11115555]]]];;;;
to get a hexadecimal digit, or
@@@@zzzz2222 ==== ((((''''00001111'''' ........ ''''33331111''''))));;;; pppprrrriiiinnnntttt $$$$zzzz2222[[[[$$$$mmmmddddaaaayyyy]]]];;;;
13/Feb/96 perl 5.002 with 8
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
to get dates with leading zeros. If the final value
specified is not in the sequence that the magical
increment would produce, the sequence goes until the next
value would be longer than the final value specified.
CCCCoooonnnnddddiiiittttiiiioooonnnnaaaallll OOOOppppeeeerrrraaaattttoooorrrr
Ternary "?:" is the conditional operator, just as in C.
It works much like an if-then-else. If the argument
before the ? is true, the argument before the : is
returned, otherwise the argument after the : is returned.
For example:
pppprrrriiiinnnnttttffff """"IIII hhhhaaaavvvveeee %%%%dddd ddddoooogggg%%%%ssss....\\\\nnnn"""",,,, $$$$nnnn,,,,
(((($$$$nnnn ======== 1111)))) ???? '''''''' :::: """"ssss"""";;;;
Scalar or list context propagates downward into the 2nd or
3rd argument, whichever is selected.
$$$$aaaa ==== $$$$ooookkkk ???? $$$$bbbb :::: $$$$cccc;;;; #### ggggeeeetttt aaaa ssssccccaaaallllaaaarrrr
@@@@aaaa ==== $$$$ooookkkk ???? @@@@bbbb :::: @@@@cccc;;;; #### ggggeeeetttt aaaannnn aaaarrrrrrrraaaayyyy
$$$$aaaa ==== $$$$ooookkkk ???? @@@@bbbb :::: @@@@cccc;;;; #### ooooooooppppssss,,,, tttthhhhaaaatttt''''ssss jjjjuuuusssstttt aaaa ccccoooouuuunnnntttt!!!!
The operator may be assigned to if both the 2nd and 3rd
arguments are legal lvalues (meaning that you can assign
to them):
(((($$$$aaaa____oooorrrr____bbbb ???? $$$$aaaa :::: $$$$bbbb)))) ==== $$$$cccc;;;;
This is not necessarily guaranteed to contribute to the
readability of your program.
AAAAssssssssiiiiggggnnnnmmmmeeeennnntttt OOOOppppeeeerrrraaaattttoooorrrrssss
"=" is the ordinary assignment operator.
Assignment operators work as in C. That is,
$$$$aaaa ++++==== 2222;;;;
is equivalent to
$$$$aaaa ==== $$$$aaaa ++++ 2222;;;;
although without duplicating any side effects that
dereferencing the lvalue might trigger, such as from
_t_i_e_(_). Other assignment operators work similarly. The
following are recognized:
********==== ++++==== ****==== &&&&==== <<<<<<<<==== &&&&&&&&====
----==== ////==== ||||==== >>>>>>>>==== ||||||||====
....==== %%%%==== ^^^^====
xxxx====
13/Feb/96 perl 5.002 with 9
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
Note that while these are grouped by family, they all have
the precedence of assignment.
Unlike in C, the assignment operator produces a valid
lvalue. Modifying an assignment is equivalent to doing
the assignment and then modifying the variable that was
assigned to. This is useful for modifying a copy of
something, like this:
(((($$$$ttttmmmmpppp ==== $$$$gggglllloooobbbbaaaallll)))) ====~~~~ ttttrrrr [[[[AAAA----ZZZZ]]]] [[[[aaaa----zzzz]]]];;;;
Likewise,
(((($$$$aaaa ++++==== 2222)))) ****==== 3333;;;;
is equivalent to
$$$$aaaa ++++==== 2222;;;;
$$$$aaaa ****==== 3333;;;;
CCCCoooommmmmmmmaaaa OOOOppppeeeerrrraaaattttoooorrrr
Binary "," is the comma operator. In a scalar context it
evaluates its left argument, throws that value away, then
evaluates its right argument and returns that value. This
is just like C's comma operator.
In a list context, it's just the list argument separator,
and inserts both its arguments into the list.
The => digraph is mostly just a synonym for the comma
operator. It's useful for documenting arguments that come
in pairs. As of release 5.001, it also forces any word to
the left of it to be interpreted as a string.
LLLLiiiisssstttt OOOOppppeeeerrrraaaattttoooorrrrssss ((((RRRRiiiigggghhhhttttwwwwaaaarrrrdddd))))
On the right side of a list operator, it has very low
precedence, such that it controls all comma-separated
expressions found there. The only operators with lower
precedence are the logical operators "and", "or", and
"not", which may be used to evaluate calls to list
operators without the need for extra parentheses:
ooooppppeeeennnn HHHHAAAANNNNDDDDLLLLEEEE,,,, """"ffffiiiilllleeeennnnaaaammmmeeee""""
oooorrrr ddddiiiieeee """"CCCCaaaannnn''''tttt ooooppppeeeennnn:::: $$$$!!!!\\\\nnnn"""";;;;
See also discussion of list operators in the section on
_L_i_s_t _O_p_e_r_a_t_o_r_s _(_L_e_f_t_w_a_r_d_).
13/Feb/96 perl 5.002 with 10
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
LLLLooooggggiiiiccccaaaallll NNNNooootttt
Unary "not" returns the logical negation of the expression
to its right. It's the equivalent of "!" except for the
very low precedence.
LLLLooooggggiiiiccccaaaallll AAAAnnnndddd
Binary "and" returns the logical conjunction of the two
surrounding expressions. It's equivalent to && except for
the very low precedence. This means that it short-
circuits: i.e. the right expression is evaluated only if
the left expression is true.
LLLLooooggggiiiiccccaaaallll oooorrrr aaaannnndddd EEEExxxxcccclllluuuussssiiiivvvveeee OOOOrrrr
Binary "or" returns the logical disjunction of the two
surrounding expressions. It's equivalent to || except for
the very low precedence. This means that it short-
circuits: i.e. the right expression is evaluated only if
the left expression is false.
Binary "xor" returns the exclusive-OR of the two
surrounding expressions. It cannot short circuit, of
course.
CCCC OOOOppppeeeerrrraaaattttoooorrrrssss MMMMiiiissssssssiiiinnnngggg FFFFrrrroooommmm PPPPeeeerrrrllll
Here is what C has that Perl doesn't:
unary & Address-of operator. (But see the "\" operator
for taking a reference.)
unary * Dereference-address operator. (Perl's prefix
dereferencing operators are typed: $, @, %, and
&.)
(TYPE) Type casting operator.
QQQQuuuuooootttteeee aaaannnndddd QQQQuuuuooootttteeeelllliiiikkkkeeee OOOOppppeeeerrrraaaattttoooorrrrssss
While we usually think of quotes as literal values, in
Perl they function as operators, providing various kinds
of interpolating and pattern matching capabilities. Perl
provides customary quote characters for these behaviors,
but also provides a way for you to choose your quote
character for any of them. In the following table, a {{{{}}}}
represents any pair of delimiters you choose. Non-
bracketing delimiters use the same character fore and aft,
but the 4 sorts of brackets (round, angle, square, curly)
will all nest.
13/Feb/96 perl 5.002 with 11
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
CCCCuuuussssttttoooommmmaaaarrrryyyy GGGGeeeennnneeeerrrriiiicccc MMMMeeeeaaaannnniiiinnnngggg IIIInnnntttteeeerrrrppppoooollllaaaatttteeeessss
'''''''' qqqq{{{{}}}} LLLLiiiitttteeeerrrraaaallll nnnnoooo
"""""""" qqqqqqqq{{{{}}}} LLLLiiiitttteeeerrrraaaallll yyyyeeeessss
```````` qqqqxxxx{{{{}}}} CCCCoooommmmmmmmaaaannnndddd yyyyeeeessss
qqqqwwww{{{{}}}} WWWWoooorrrrdddd lllliiiisssstttt nnnnoooo
//////// mmmm{{{{}}}} PPPPaaaatttttttteeeerrrrnnnn mmmmaaaattttcccchhhh yyyyeeeessss
ssss{{{{}}}}{{{{}}}} SSSSuuuubbbbssssttttiiiittttuuuuttttiiiioooonnnn yyyyeeeessss
ttttrrrr{{{{}}}}{{{{}}}} TTTTrrrraaaannnnssssllllaaaattttiiiioooonnnn nnnnoooo
For constructs that do interpolation, variables beginning
with "$$$$" or "@@@@" are interpolated, as are the following
sequences:
\\\\tttt ttttaaaabbbb
\\\\nnnn nnnneeeewwwwlllliiiinnnneeee
\\\\rrrr rrrreeeettttuuuurrrrnnnn
\\\\ffff ffffoooorrrrmmmm ffffeeeeeeeedddd
\\\\bbbb bbbbaaaacccckkkkssssppppaaaacccceeee
\\\\aaaa aaaallllaaaarrrrmmmm ((((bbbbeeeellllllll))))
\\\\eeee eeeessssccccaaaappppeeee
\\\\000033333333 ooooccccttttaaaallll cccchhhhaaaarrrr
\\\\xxxx1111bbbb hhhheeeexxxx cccchhhhaaaarrrr
\\\\cccc[[[[ ccccoooonnnnttttrrrroooollll cccchhhhaaaarrrr
\\\\llll lllloooowwwweeeerrrrccccaaaasssseeee nnnneeeexxxxtttt cccchhhhaaaarrrr
\\\\uuuu uuuuppppppppeeeerrrrccccaaaasssseeee nnnneeeexxxxtttt cccchhhhaaaarrrr
\\\\LLLL lllloooowwwweeeerrrrccccaaaasssseeee ttttiiiillllllll \\\\EEEE
\\\\UUUU uuuuppppppppeeeerrrrccccaaaasssseeee ttttiiiillllllll \\\\EEEE
\\\\EEEE eeeennnndddd ccccaaaasssseeee mmmmooooddddiiiiffffiiiiccccaaaattttiiiioooonnnn
\\\\QQQQ qqqquuuuooootttteeee rrrreeeeggggeeeexxxxpppp mmmmeeeettttaaaacccchhhhaaaarrrraaaacccctttteeeerrrrssss ttttiiiillllllll \\\\EEEE
Patterns are subject to an additional level of
interpretation as a regular expression. This is done as a
second pass, after variables are interpolated, so that
regular expressions may be incorporated into the pattern
from the variables. If this is not what you want, use \\\\QQQQ
to interpolate a variable literally.
Apart from the above, there are no multiple levels of
interpolation. In particular, contrary to the
expectations of shell programmers, backquotes do _N_O_T
interpolate within double quotes, nor do single quotes
impede evaluation of variables when used within double
quotes.
RRRReeeeggggeeeexxxxpppp QQQQuuuuooootttteeeelllliiiikkkkeeee OOOOppppeeeerrrraaaattttoooorrrrssss
Here are the quotelike operators that apply to pattern
matching and related activities.
?PATTERN?
This is just like the ////ppppaaaatttttttteeeerrrrnnnn//// search, except
that it matches only once between calls to the
_r_e_s_e_t_(_) operator. This is a useful optimization
when you only want to see the first occurrence of
13/Feb/96 perl 5.002 with 12
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
something in each file of a set of files, for
instance. Only ???????? patterns local to the current
package are reset.
This usage is vaguely deprecated, and may be
removed in some future version of Perl.
m/PATTERN/gimosx
/PATTERN/gimosx
Searches a string for a pattern match, and in a
scalar context returns true (1) or false (''). If
no string is specified via the ====~~~~ or !!!!~~~~ operator,
the $$$$____ string is searched. (The string specified
with ====~~~~ need not be an lvalue--it may be the
result of an expression evaluation, but remember
the ====~~~~ binds rather tightly.) See also the _p_e_r_l_r_e
manpage.
Options are:
gggg MMMMaaaattttcccchhhh gggglllloooobbbbaaaallllllllyyyy,,,, iiii....eeee.... ffffiiiinnnndddd aaaallllllll ooooccccccccuuuurrrrrrrreeeennnncccceeeessss....
iiii DDDDoooo ccccaaaasssseeee----iiiinnnnsssseeeennnnssssiiiittttiiiivvvveeee ppppaaaatttttttteeeerrrrnnnn mmmmaaaattttcccchhhhiiiinnnngggg....
mmmm TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss mmmmuuuullllttttiiiipppplllleeee lllliiiinnnneeeessss....
oooo OOOOnnnnllllyyyy ccccoooommmmppppiiiilllleeee ppppaaaatttttttteeeerrrrnnnn oooonnnncccceeee....
ssss TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss ssssiiiinnnngggglllleeee lllliiiinnnneeee....
xxxx UUUUsssseeee eeeexxxxtttteeeennnnddddeeeedddd rrrreeeegggguuuullllaaaarrrr eeeexxxxpppprrrreeeessssssssiiiioooonnnnssss....
If "/" is the delimiter then the initial mmmm is
optional. With the mmmm you can use any pair of non-
alphanumeric, non-whitespace characters as
delimiters. This is particularly useful for
matching Unix path names that contain "/", to
avoid LTS (leaning toothpick syndrome).
PATTERN may contain variables, which will be
interpolated (and the pattern recompiled) every
time the pattern search is evaluated. (Note that
$$$$)))) and $$$$|||| might not be interpolated because they
look like end-of-string tests.) If you want such
a pattern to be compiled only once, add a ////oooo after
the trailing delimiter. This avoids expensive
run-time recompilations, and is useful when the
value you are interpolating won't change over the
life of the script. However, mentioning ////oooo
constitutes a promise that you won't change the
variables in the pattern. If you change them,
Perl won't even notice.
If the PATTERN evaluates to a null string, the
last successfully executed regular expression is
used instead.
If used in a context that requires a list value, a
13/Feb/96 perl 5.002 with 13
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
pattern match returns a list consisting of the
subexpressions matched by the parentheses in the
pattern, i.e. ($1, $$$$2222, $$$$3333...). (Note that here $$$$1111
etc. are also set, and that this differs from Perl
4's behavior.) If the match fails, a null array
is returned. If the match succeeds, but there
were no parentheses, a list value of (1) is
returned.
Examples:
ooooppppeeeennnn((((TTTTTTTTYYYY,,,, ''''////ddddeeeevvvv////ttttttttyyyy''''))));;;;
<<<<TTTTTTTTYYYY>>>> ====~~~~ ////^^^^yyyy////iiii &&&&&&&& ffffoooooooo(((())));;;; #### ddddoooo ffffoooooooo iiiiffff ddddeeeessssiiiirrrreeeedddd
iiiiffff ((((////VVVVeeeerrrrssssiiiioooonnnn:::: ****(((([[[[0000----9999....]]]]****))))////)))) {{{{ $$$$vvvveeeerrrrssssiiiioooonnnn ==== $$$$1111;;;; }}}}
nnnneeeexxxxtttt iiiiffff mmmm####^^^^////uuuussssrrrr////ssssppppoooooooollll////uuuuuuuuccccpppp####;;;;
#### ppppoooooooorrrr mmmmaaaannnn''''ssss ggggrrrreeeepppp
$$$$aaaarrrrgggg ==== sssshhhhiiiifffftttt;;;;
wwwwhhhhiiiilllleeee ((((<<<<>>>>)))) {{{{
pppprrrriiiinnnntttt iiiiffff ////$$$$aaaarrrrgggg////oooo;;;; #### ccccoooommmmppppiiiilllleeee oooonnnnllllyyyy oooonnnncccceeee
}}}}
iiiiffff (((((((($$$$FFFF1111,,,, $$$$FFFF2222,,,, $$$$EEEEttttcccc)))) ==== (((($$$$ffffoooooooo ====~~~~ ////^^^^((((\\\\SSSS++++))))\\\\ssss++++((((\\\\SSSS++++))))\\\\ssss****((((....****))))////))))))))
This last example splits $$$$ffffoooooooo into the first two
words and the remainder of the line, and assigns
those three fields to $$$$FFFF1111, $$$$FFFF2222 and $$$$EEEEttttcccc. The
conditional is true if any variables were
assigned, i.e. if the pattern matched.
The ////gggg modifier specifies global pattern
matching--that is, matching as many times as
possible within the string. How it behaves
depends on the context. In a list context, it
returns a list of all the substrings matched by
all the parentheses in the regular expression. If
there are no parentheses, it returns a list of all
the matched strings, as if there were parentheses
around the whole pattern.
In a scalar context, mmmm////////gggg iterates through the
string, returning TRUE each time it matches, and
FALSE when it eventually runs out of matches. (In
other words, it remembers where it left off last
time and restarts the search at that point. You
can actually find the current match position of a
string using the _p_o_s_(_) function--see the _p_e_r_l_f_u_n_c
manpage.) If you modify the string in any way,
the match position is reset to the beginning.
Examples:
13/Feb/96 perl 5.002 with 14
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
#### lllliiiisssstttt ccccoooonnnntttteeeexxxxtttt
(((($$$$oooonnnneeee,,,,$$$$ffffiiiivvvveeee,,,,$$$$ffffiiiifffftttteeeeeeeennnn)))) ==== ((((````uuuuppppttttiiiimmmmeeee```` ====~~~~ ////((((\\\\dddd++++\\\\....\\\\dddd++++))))////gggg))));;;;
#### ssssccccaaaallllaaaarrrr ccccoooonnnntttteeeexxxxtttt
$$$$//// ==== """""""";;;; $$$$**** ==== 1111;;;; #### $$$$**** ddddeeeepppprrrreeeeccccaaaatttteeeedddd iiiinnnn PPPPeeeerrrrllll 5555
wwwwhhhhiiiilllleeee (((($$$$ppppaaaarrrraaaaggggrrrraaaapppphhhh ==== <<<<>>>>)))) {{{{
wwwwhhhhiiiilllleeee (((($$$$ppppaaaarrrraaaaggggrrrraaaapppphhhh ====~~~~ ////[[[[aaaa----zzzz]]]][[[[''''""""))))]]]]****[[[[....!!!!????]]]]++++[[[[''''""""))))]]]]****\\\\ssss////gggg)))) {{{{
$$$$sssseeeennnntttteeeennnncccceeeessss++++++++;;;;
}}}}
}}}}
pppprrrriiiinnnntttt """"$$$$sssseeeennnntttteeeennnncccceeeessss\\\\nnnn"""";;;;
q/STRING/
''''SSSSTTTTRRRRIIIINNNNGGGG''''
A single-quoted, literal string. Backslashes are
ignored, unless followed by the delimiter or
another backslash, in which case the delimiter or
backslash is interpolated.
$$$$ffffoooooooo ==== qqqq!!!!IIII ssssaaaaiiiidddd,,,, """"YYYYoooouuuu ssssaaaaiiiidddd,,,, ''''SSSShhhheeee ssssaaaaiiiidddd iiiitttt....''''""""!!!!;;;;
$$$$bbbbaaaarrrr ==== qqqq((((''''TTTThhhhiiiissss iiiissss iiiitttt....''''))));;;;
qq/STRING/
"STRING"
A double-quoted, interpolated string.
$$$$____ ....==== qqqqqqqq
((((************ TTTThhhheeee pppprrrreeeevvvviiiioooouuuussss lllliiiinnnneeee ccccoooonnnnttttaaaaiiiinnnnssss tttthhhheeee nnnnaaaauuuugggghhhhttttyyyy wwwwoooorrrrdddd """"$$$$1111""""....\\\\nnnn))))
iiiiffff ////((((ttttccccllll||||rrrreeeexxxxxxxx||||ppppyyyytttthhhhoooonnnn))))////;;;; #### ::::----))))
qx/STRING/
`STRING`
A string which is interpolated and then executed
as a system command. The collected standard
output of the command is returned. In scalar
context, it comes back as a single (potentially
multi-line) string. In list context, returns a
list of lines (however you've defined lines with
$/ or $$$$IIIINNNNPPPPUUUUTTTT____RRRREEEECCCCOOOORRRRDDDD____SSSSEEEEPPPPAAAARRRRAAAATTTTOOOORRRR).
$$$$ttttooooddddaaaayyyy ==== qqqqxxxx{{{{ ddddaaaatttteeee }}}};;;;
See the section on _I_/_O _O_p_e_r_a_t_o_r_s for more
discussion.
qw/STRING/
Returns a list of the words extracted out of
STRING, using embedded whitespace as the word
13/Feb/96 perl 5.002 with 15
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
delimiters. It is exactly equivalent to
sssspppplllliiiitttt(((('''' '''',,,, qqqq////SSSSTTTTRRRRIIIINNNNGGGG////))));;;;
Some frequently seen examples:
uuuusssseeee PPPPOOOOSSSSIIIIXXXX qqqqwwww(((( sssseeeettttllllooooccccaaaalllleeee llllooooccccaaaalllleeeeccccoooonnnnvvvv ))))
@@@@EEEEXXXXPPPPOOOORRRRTTTT ==== qqqqwwww(((( ffffoooooooo bbbbaaaarrrr bbbbaaaazzzz ))));;;;
s/PATTERN/REPLACEMENT/egimosx
Searches a string for a pattern, and if found,
replaces that pattern with the replacement text
and returns the number of substitutions made.
Otherwise it returns false (0).
If no string is specified via the ====~~~~ or !!!!~~~~
operator, the $$$$____ variable is searched and
modified. (The string specified with ====~~~~ must be a
scalar variable, an array element, a hash element,
or an assignment to one of those, i.e. an lvalue.)
If the delimiter chosen is single quote, no
variable interpolation is done on either the
PATTERN or the REPLACEMENT. Otherwise, if the
PATTERN contains a $ that looks like a variable
rather than an end-of-string test, the variable
will be interpolated into the pattern at run-time.
If you only want the pattern compiled once the
first time the variable is interpolated, use the
////oooo option. If the pattern evaluates to a null
string, the last successfully executed regular
expression is used instead. See the _p_e_r_l_r_e
manpage for further explanation on these.
Options are:
eeee EEEEvvvvaaaalllluuuuaaaatttteeee tttthhhheeee rrrriiiigggghhhhtttt ssssiiiiddddeeee aaaassss aaaannnn eeeexxxxpppprrrreeeessssssssiiiioooonnnn....
gggg RRRReeeeppppllllaaaacccceeee gggglllloooobbbbaaaallllllllyyyy,,,, iiii....eeee.... aaaallllllll ooooccccccccuuuurrrrrrrreeeennnncccceeeessss....
iiii DDDDoooo ccccaaaasssseeee----iiiinnnnsssseeeennnnssssiiiittttiiiivvvveeee ppppaaaatttttttteeeerrrrnnnn mmmmaaaattttcccchhhhiiiinnnngggg....
mmmm TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss mmmmuuuullllttttiiiipppplllleeee lllliiiinnnneeeessss....
oooo OOOOnnnnllllyyyy ccccoooommmmppppiiiilllleeee ppppaaaatttttttteeeerrrrnnnn oooonnnncccceeee....
ssss TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss ssssiiiinnnngggglllleeee lllliiiinnnneeee....
xxxx UUUUsssseeee eeeexxxxtttteeeennnnddddeeeedddd rrrreeeegggguuuullllaaaarrrr eeeexxxxpppprrrreeeessssssssiiiioooonnnnssss....
Any non-alphanumeric, non-whitespace delimiter may
replace the slashes. If single quotes are used,
no interpretation is done on the replacement
string (the ////eeee modifier overrides this, however).
If backquotes are used, the replacement string is
a command to execute whose output will be used as
the actual replacement text. If the PATTERN is
delimited by bracketing quotes, the REPLACEMENT
has its own pair of quotes, which may or may not
13/Feb/96 perl 5.002 with 16
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
be bracketing quotes, e.g. ssss((((ffffoooooooo))))((((bbbbaaaarrrr)))) or
ssss<<<<ffffoooooooo>>>>////bbbbaaaarrrr////. A ////eeee will cause the replacement
portion to be interpreter as a full-fledged Perl
expression and _e_v_a_l_(_)ed right then and there. It
is, however, syntax checked at compile-time.
Examples:
ssss////\\\\bbbbggggrrrreeeeeeeennnn\\\\bbbb////mmmmaaaauuuuvvvveeee////gggg;;;; #### ddddoooonnnn''''tttt cccchhhhaaaannnnggggeeee wwwwiiiinnnntttteeeerrrrggggrrrreeeeeeeennnn
$$$$ppppaaaatttthhhh ====~~~~ ssss||||////uuuussssrrrr////bbbbiiiinnnn||||////uuuussssrrrr////llllooooccccaaaallll////bbbbiiiinnnn||||;;;;
ssss////LLLLooooggggiiiinnnn:::: $$$$ffffoooooooo////LLLLooooggggiiiinnnn:::: $$$$bbbbaaaarrrr////;;;; #### rrrruuuunnnn----ttttiiiimmmmeeee ppppaaaatttttttteeeerrrrnnnn
(((($$$$ffffoooooooo ==== $$$$bbbbaaaarrrr)))) ====~~~~ ssss////tttthhhhiiiissss////tttthhhhaaaatttt////;;;;
$$$$ccccoooouuuunnnntttt ==== (((($$$$ppppaaaarrrraaaaggggrrrraaaapppphhhh ====~~~~ ssss////MMMMiiiisssstttteeeerrrr\\\\bbbb////MMMMrrrr....////gggg))));;;;
$$$$____ ==== ''''aaaabbbbcccc111122223333xxxxyyyyzzzz'''';;;;
ssss////\\\\dddd++++////$$$$&&&&****2222////eeee;;;; #### yyyyiiiieeeellllddddssss ''''aaaabbbbcccc222244446666xxxxyyyyzzzz''''
ssss////\\\\dddd++++////sssspppprrrriiiinnnnttttffff((((""""%%%%5555dddd"""",,,,$$$$&&&&))))////eeee;;;; #### yyyyiiiieeeellllddddssss ''''aaaabbbbcccc 222244446666xxxxyyyyzzzz''''
ssss////\\\\wwww////$$$$&&&& xxxx 2222////eeeegggg;;;; #### yyyyiiiieeeellllddddssss ''''aaaaaaaabbbbbbbbcccccccc 222222224444444466666666xxxxxxxxyyyyyyyyzzzzzzzz''''
ssss////%%%%((((....))))////$$$$ppppeeeerrrrcccceeeennnntttt{{{{$$$$1111}}}}////gggg;;;; #### cccchhhhaaaannnnggggeeee ppppeeeerrrrcccceeeennnntttt eeeessssccccaaaappppeeeessss;;;; nnnnoooo ////eeee
ssss////%%%%((((....))))////$$$$ppppeeeerrrrcccceeeennnntttt{{{{$$$$1111}}}} |||||||| $$$$&&&&////ggggeeee;;;; #### eeeexxxxpppprrrr nnnnoooowwww,,,, ssssoooo ////eeee
ssss////^^^^====((((\\\\wwww++++))))////&&&&ppppoooodddd(((($$$$1111))))////ggggeeee;;;; #### uuuusssseeee ffffuuuunnnnccccttttiiiioooonnnn ccccaaaallllllll
#### ////eeee''''ssss ccccaaaannnn eeeevvvveeeennnn nnnneeeesssstttt;;;; tttthhhhiiiissss wwwwiiiillllllll eeeexxxxppppaaaannnndddd
#### ssssiiiimmmmpppplllleeee eeeemmmmbbbbeeeeddddddddeeeedddd vvvvaaaarrrriiiiaaaabbbblllleeeessss iiiinnnn $$$$____
ssss////((((\\\\$$$$\\\\wwww++++))))////$$$$1111////eeeeeeeegggg;;;;
#### DDDDeeeelllleeeetttteeee CCCC ccccoooommmmmmmmeeeennnnttttssss....
$$$$pppprrrrooooggggrrrraaaammmm ====~~~~ ssss {{{{
////\\\\**** #### MMMMaaaattttcccchhhh tttthhhheeee ooooppppeeeennnniiiinnnngggg ddddeeeelllliiiimmmmiiiitttteeeerrrr....
....****???? #### MMMMaaaattttcccchhhh aaaa mmmmiiiinnnniiiimmmmaaaallll nnnnuuuummmmbbbbeeeerrrr ooooffff cccchhhhaaaarrrraaaacccctttteeeerrrrssss....
\\\\****//// #### MMMMaaaattttcccchhhh tttthhhheeee cccclllloooossssiiiinnnngggg ddddeeeelllliiiimmmmiiiitttteeeerrrr....
}}}} [[[[]]]]ggggssssxxxx;;;;
ssss////^^^^\\\\ssss****((((....****????))))\\\\ssss****$$$$////$$$$1111////;;;; #### ttttrrrriiiimmmm wwwwhhhhiiiitttteeee ssssppppaaaacccceeee
ssss////(((([[[[^^^^ ]]]]****)))) ****(((([[[[^^^^ ]]]]****))))////$$$$2222 $$$$1111////;;;; #### rrrreeeevvvveeeerrrrsssseeee 1111sssstttt ttttwwwwoooo ffffiiiieeeellllddddssss
Note the use of $ instead of \ in the last
example. Unlike sssseeeedddd, we only use the \<_d_i_g_i_t>
form in the left hand side. Anywhere else it's
$<_d_i_g_i_t>.
Occasionally, you can't just use a ////gggg to get all
the changes to occur. Here are two common cases:
#### ppppuuuutttt ccccoooommmmmmmmaaaassss iiiinnnn tttthhhheeee rrrriiiigggghhhhtttt ppppllllaaaacccceeeessss iiiinnnn aaaannnn iiiinnnntttteeeeggggeeeerrrr
1111 wwwwhhhhiiiilllleeee ssss////((((....****\\\\dddd))))((((\\\\dddd\\\\dddd\\\\dddd))))////$$$$1111,,,,$$$$2222////gggg;;;; #### ppppeeeerrrrllll4444
1111 wwwwhhhhiiiilllleeee ssss////((((\\\\dddd))))((((\\\\dddd\\\\dddd\\\\dddd))))((((????!!!!\\\\dddd))))////$$$$1111,,,,$$$$2222////gggg;;;; #### ppppeeeerrrrllll5555
13/Feb/96 perl 5.002 with 17
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
#### eeeexxxxppppaaaannnndddd ttttaaaabbbbssss ttttoooo 8888----ccccoooolllluuuummmmnnnn ssssppppaaaacccciiiinnnngggg
1111 wwwwhhhhiiiilllleeee ssss////\\\\tttt++++////'''' '''' xxxx ((((lllleeeennnnggggtttthhhh(((($$$$&&&&))))****8888 ---- lllleeeennnnggggtttthhhh(((($$$$````))))%%%%8888))))////eeee;;;;
tr/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds
Translates all occurrences of the characters found
in the search list with the corresponding
character in the replacement list. It returns the
number of characters replaced or deleted. If no
string is specified via the =~ or !~ operator, the
$$$$____ string is translated. (The string specified
with =~ must be a scalar variable, an array
element, or an assignment to one of those, i.e. an
lvalue.) For sssseeeedddd devotees, yyyy is provided as a
synonym for ttttrrrr. If the SEARCHLIST is delimited by
bracketing quotes, the REPLACEMENTLIST has its own
pair of quotes, which may or may not be bracketing
quotes, e.g. ttttrrrr[[[[AAAA----ZZZZ]]]][[[[aaaa----zzzz]]]] or ttttrrrr((((++++----****////))))////AAAABBBBCCCCDDDD////.
Options:
cccc CCCCoooommmmpppplllleeeemmmmeeeennnntttt tttthhhheeee SSSSEEEEAAAARRRRCCCCHHHHLLLLIIIISSSSTTTT....
dddd DDDDeeeelllleeeetttteeee ffffoooouuuunnnndddd bbbbuuuutttt uuuunnnnrrrreeeeppppllllaaaacccceeeedddd cccchhhhaaaarrrraaaacccctttteeeerrrrssss....
ssss SSSSqqqquuuuaaaasssshhhh dddduuuupppplllliiiiccccaaaatttteeee rrrreeeeppppllllaaaacccceeeedddd cccchhhhaaaarrrraaaacccctttteeeerrrrssss....
If the ////cccc modifier is specified, the SEARCHLIST
character set is complemented. If the ////dddd modifier
is specified, any characters specified by
SEARCHLIST not found in REPLACEMENTLIST are
deleted. (Note that this is slightly more
flexible than the behavior of some ttttrrrr programs,
which delete anything they find in the SEARCHLIST,
period.) If the ////ssss modifier is specified,
sequences of characters that were translated to
the same character are squashed down to a single
instance of the character.
If the ////dddd modifier is used, the REPLACEMENTLIST is
always interpreted exactly as specified.
Otherwise, if the REPLACEMENTLIST is shorter than
the SEARCHLIST, the final character is replicated
till it is long enough. If the REPLACEMENTLIST is
null, the SEARCHLIST is replicated. This latter
is useful for counting characters in a class or
for squashing character sequences in a class.
Examples:
$$$$AAAARRRRGGGGVVVV[[[[1111]]]] ====~~~~ ttttrrrr////AAAA----ZZZZ////aaaa----zzzz////;;;; #### ccccaaaannnnoooonnnniiiiccccaaaalllliiiizzzzeeee ttttoooo lllloooowwwweeeerrrr ccccaaaasssseeee
$$$$ccccnnnntttt ==== ttttrrrr////****////****////;;;; #### ccccoooouuuunnnntttt tttthhhheeee ssssttttaaaarrrrssss iiiinnnn $$$$____
13/Feb/96 perl 5.002 with 18
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
$$$$ccccnnnntttt ==== $$$$sssskkkkyyyy ====~~~~ ttttrrrr////****////****////;;;; #### ccccoooouuuunnnntttt tttthhhheeee ssssttttaaaarrrrssss iiiinnnn $$$$sssskkkkyyyy
$$$$ccccnnnntttt ==== ttttrrrr////0000----9999////////;;;; #### ccccoooouuuunnnntttt tttthhhheeee ddddiiiiggggiiiittttssss iiiinnnn $$$$____
ttttrrrr////aaaa----zzzzAAAA----ZZZZ////////ssss;;;; #### bbbbooooooookkkkkkkkeeeeeeeeppppeeeerrrr ---->>>> bbbbooookkkkeeeeppppeeeerrrr
(((($$$$HHHHOOOOSSSSTTTT ==== $$$$hhhhoooosssstttt)))) ====~~~~ ttttrrrr////aaaa----zzzz////AAAA----ZZZZ////;;;;
ttttrrrr////aaaa----zzzzAAAA----ZZZZ//// ////ccccssss;;;; #### cccchhhhaaaannnnggggeeee nnnnoooonnnn----aaaallllpppphhhhaaaassss ttttoooo ssssiiiinnnngggglllleeee ssssppppaaaacccceeee
ttttrrrr [[[[\\\\222200000000----\\\\333377777777]]]]
[[[[\\\\000000000000----\\\\111177777777]]]];;;; #### ddddeeeelllleeeetttteeee 8888tttthhhh bbbbiiiitttt
If multiple translations are given for a
character, only the first one is used:
ttttrrrr////AAAAAAAAAAAA////XXXXYYYYZZZZ////
will translate any A to X.
Note that because the translation table is built
at compile time, neither the SEARCHLIST nor the
REPLACEMENTLIST are subjected to double quote
interpolation. That means that if you want to use
variables, you must use an _e_v_a_l_(_):
eeeevvvvaaaallll """"ttttrrrr////$$$$oooollllddddlllliiiisssstttt////$$$$nnnneeeewwwwlllliiiisssstttt////"""";;;;
ddddiiiieeee $$$$@@@@ iiiiffff $$$$@@@@;;;;
eeeevvvvaaaallll """"ttttrrrr////$$$$oooollllddddlllliiiisssstttt////$$$$nnnneeeewwwwlllliiiisssstttt////,,,, 1111"""" oooorrrr ddddiiiieeee $$$$@@@@;;;;
IIII////OOOO OOOOppppeeeerrrraaaattttoooorrrrssss
There are several I/O operators you should know about. A
string is enclosed by backticks (grave accents) first
undergoes variable substitution just like a double quoted
string. It is then interpreted as a command, and the
output of that command is the value of the pseudo-literal,
like in a shell. In a scalar context, a single string
consisting of all the output is returned. In a list
context, a list of values is returned, one for each line
of output. (You can set $$$$//// to use a different line
terminator.) The command is executed each time the
pseudo-literal is evaluated. The status value of the
command is returned in $$$$???? (see the _p_e_r_l_v_a_r manpage for the
interpretation of $$$$????). Unlike in ccccsssshhhh, no translation is
done on the return data--newlines remain newlines. Unlike
in any of the shells, single quotes do not hide variable
names in the command from interpretation. To pass a $
through to the shell you need to hide it with a backslash.
The generalized form of backticks is qqqqxxxx////////. (Because
backticks always undergo shell expansion as well, see the
_p_e_r_l_s_e_c manpage for security concerns.)
13/Feb/96 perl 5.002 with 19
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
Evaluating a filehandle in angle brackets yields the next
line from that file (newline included, so it's never false
until end of file, at which time an undefined value is
returned). Ordinarily you must assign that value to a
variable, but there is one situation where an automatic
assignment happens. _I_f _a_n_d _O_N_L_Y _i_f the input symbol is
the only thing inside the conditional of a wwwwhhhhiiiilllleeee loop, the
value is automatically assigned to the variable $$$$____. The
assigned value is then tested to see if it is defined.
(This may seem like an odd thing to you, but you'll use
the construct in almost every Perl script you write.)
Anyway, the following lines are equivalent to each other:
wwwwhhhhiiiilllleeee ((((ddddeeeeffffiiiinnnneeeedddd(((($$$$____ ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>)))))))) {{{{ pppprrrriiiinnnntttt;;;; }}}}
wwwwhhhhiiiilllleeee ((((<<<<SSSSTTTTDDDDIIIINNNN>>>>)))) {{{{ pppprrrriiiinnnntttt;;;; }}}}
ffffoooorrrr ((((;;;;<<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;)))) {{{{ pppprrrriiiinnnntttt;;;; }}}}
pppprrrriiiinnnntttt wwwwhhhhiiiilllleeee ddddeeeeffffiiiinnnneeeedddd(((($$$$____ ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>))));;;;
pppprrrriiiinnnntttt wwwwhhhhiiiilllleeee <<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;
The filehandles STDIN, STDOUT and STDERR are predefined.
(The filehandles ssssttttddddiiiinnnn, ssssttttddddoooouuuutttt and ssssttttddddeeeerrrrrrrr will also work
except in packages, where they would be interpreted as
local identifiers rather than global.) Additional
filehandles may be created with the _o_p_e_n_(_) function. See
the ooooppppeeeennnn(((()))) entry in the _p_e_r_l_f_u_n_c manpage for details on
this.
If a <FILEHANDLE> is used in a context that is looking for
a list, a list consisting of all the input lines is
returned, one line per list element. It's easy to make a
_L_A_R_G_E data space this way, so use with care.
The null filehandle <> is special and can be used to
emulate the behavior of sssseeeedddd and aaaawwwwkkkk. Input from <> comes
either from standard input, or from each file listed on
the command line. Here's how it works: the first time <>
is evaluated, the @@@@AAAARRRRGGGGVVVV array is checked, and if it is
null, $$$$AAAARRRRGGGGVVVV[[[[0000]]]] is set to "-", which when opened gives you
standard input. The @@@@AAAARRRRGGGGVVVV array is then processed as a
list of filenames. The loop
wwwwhhhhiiiilllleeee ((((<<<<>>>>)))) {{{{
............ #### ccccooooddddeeee ffffoooorrrr eeeeaaaacccchhhh lllliiiinnnneeee
}}}}
is equivalent to the following Perl-like pseudo code:
uuuunnnnsssshhhhiiiifffftttt((((@@@@AAAARRRRGGGGVVVV,,,, ''''----'''')))) iiiiffff $$$$####AAAARRRRGGGGVVVV <<<< $$$$[[[[;;;;
wwwwhhhhiiiilllleeee (((($$$$AAAARRRRGGGGVVVV ==== sssshhhhiiiifffftttt)))) {{{{
ooooppppeeeennnn((((AAAARRRRGGGGVVVV,,,, $$$$AAAARRRRGGGGVVVV))));;;;
wwwwhhhhiiiilllleeee ((((<<<<AAAARRRRGGGGVVVV>>>>)))) {{{{
............ #### ccccooooddddeeee ffffoooorrrr eeeeaaaacccchhhh lllliiiinnnneeee
}}}}
}}}}
13/Feb/96 perl 5.002 with 20
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
except that it isn't so cumbersome to say, and will
actually work. It really does shift array @@@@AAAARRRRGGGGVVVV and put
the current filename into variable $$$$AAAARRRRGGGGVVVV. It also uses
filehandle _A_R_G_V internally--<> is just a synonym for
<ARGV>, which is magical. (The pseudo code above doesn't
work because it treats <ARGV> as non-magical.)
You can modify @@@@AAAARRRRGGGGVVVV before the first <> as long as the
array ends up containing the list of filenames you really
want. Line numbers ($$$$....) continue as if the input were
one big happy file. (But see example under _e_o_f_(_) for how
to reset line numbers on each file.)
If you want to set @@@@AAAARRRRGGGGVVVV to your own list of files, go
right ahead. If you want to pass switches into your
script, you can use one of the Getopts modules or put a
loop on the front like this:
wwwwhhhhiiiilllleeee (((($$$$____ ==== $$$$AAAARRRRGGGGVVVV[[[[0000]]]],,,, ////^^^^----////)))) {{{{
sssshhhhiiiifffftttt;;;;
llllaaaasssstttt iiiiffff ////^^^^--------$$$$////;;;;
iiiiffff ((((////^^^^----DDDD((((....****))))////)))) {{{{ $$$$ddddeeeebbbbuuuugggg ==== $$$$1111 }}}}
iiiiffff ((((////^^^^----vvvv////)))) {{{{ $$$$vvvveeeerrrrbbbboooosssseeee++++++++ }}}}
............ #### ooootttthhhheeeerrrr sssswwwwiiiittttcccchhhheeeessss
}}}}
wwwwhhhhiiiilllleeee ((((<<<<>>>>)))) {{{{
............ #### ccccooooddddeeee ffffoooorrrr eeeeaaaacccchhhh lllliiiinnnneeee
}}}}
The <> symbol will return FALSE only once. If you call it
again after this it will assume you are processing another
@@@@AAAARRRRGGGGVVVV list, and if you haven't set @@@@AAAARRRRGGGGVVVV, will input from
STDIN.
If the string inside the angle brackets is a reference to
a scalar variable (e.g. <$foo>), then that variable
contains the name of the filehandle to input from, or a
reference to the same. For example:
$$$$ffffhhhh ==== \\\\****SSSSTTTTDDDDIIIINNNN;;;;
$$$$lllliiiinnnneeee ==== <<<<$$$$ffffhhhh>>>>;;;;
If the string inside angle brackets is not a filehandle or
a scalar variable containing a filehandle name or
reference, then it is interpreted as a filename pattern to
be globbed, and either a list of filenames or the next
filename in the list is returned, depending on context.
One level of $ interpretation is done first, but you can't
say <<<<$$$$ffffoooooooo>>>> because that's an indirect filehandle as
explained in the previous paragraph. In older version of
Perl, programmers would insert curly brackets to force
interpretation as a filename glob: <<<<$$$${{{{ffffoooooooo}}}}>>>>. These days,
it's consdired cleaner to call the internal function
directly as gggglllloooobbbb(((($$$$ffffoooooooo)))), which is probably the right way to
13/Feb/96 perl 5.002 with 21
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
have done it in the first place.) Example:
wwwwhhhhiiiilllleeee ((((<<<<****....cccc>>>>)))) {{{{
cccchhhhmmmmoooodddd 0000666644444444,,,, $$$$____;;;;
}}}}
is equivalent to
ooooppppeeeennnn((((FFFFOOOOOOOO,,,, """"eeeecccchhhhoooo ****....cccc |||| ttttrrrr ----ssss '''' \\\\tttt\\\\rrrr\\\\ffff'''' ''''\\\\\\\\000011112222\\\\\\\\000011112222\\\\\\\\000011112222\\\\\\\\000011112222''''||||""""))));;;;
wwwwhhhhiiiilllleeee ((((<<<<FFFFOOOOOOOO>>>>)))) {{{{
cccchhhhoooopppp;;;;
cccchhhhmmmmoooodddd 0000666644444444,,,, $$$$____;;;;
}}}}
In fact, it's currently implemented that way. (Which
means it will not work on filenames with spaces in them
unless you have _c_s_h(1) on your machine.) Of course, the
shortest way to do the above is:
cccchhhhmmmmoooodddd 0000666644444444,,,, <<<<****....cccc>>>>;;;;
Because globbing invokes a shell, it's often faster to
call _r_e_a_d_d_i_r_(_) yourself and just do your own _g_r_e_p_(_) on the
filenames. Furthermore, due to its current implementation
of using a shell, the _g_l_o_b_(_) routine may get "Arg list too
long" errors (unless you've installed _t_c_s_h(1L) as
_/_b_i_n_/_c_s_h).
A glob only evaluates its (embedded) argument when it is
starting a new list. All values must be read before it
will start over. In a list context this isn't important,
because you automatically get them all anyway. In a
scalar context, however, the operator returns the next
value each time it is called, or a FALSE value if you've
just run out. Again, FALSE is returned only once. So if
you're expecting a single value from a glob, it is much
better to say
(((($$$$ffffiiiilllleeee)))) ==== <<<<bbbblllluuuurrrrcccchhhh****>>>>;;;;
than
$$$$ffffiiiilllleeee ==== <<<<bbbblllluuuurrrrcccchhhh****>>>>;;;;
because the latter will alternate between returning a
filename and returning FALSE.
It you're trying to do variable interpolation, it's
definitely better to use the _g_l_o_b_(_) function, because the
older notation can cause people to become confused with
the indirect filehandle notatin.
@@@@ffffiiiilllleeeessss ==== gggglllloooobbbb((((""""$$$$ddddiiiirrrr////****....[[[[cccchhhh]]]]""""))));;;;
@@@@ffffiiiilllleeeessss ==== gggglllloooobbbb(((($$$$ffffiiiilllleeeessss[[[[$$$$iiii]]]]))));;;;
13/Feb/96 perl 5.002 with 22
PERLOP(1) User Contributed Perl Documentation PERLOP(1)
CCCCoooonnnnssssttttaaaannnntttt FFFFoooollllddddiiiinnnngggg
Like C, Perl does a certain amount of expression
evaluation at compile time, whenever it determines that
all of the arguments to an operator are static and have no
side effects. In particular, string concatenation happens
at compile time between literals that don't do variable
substitution. Backslash interpretation also happens at
compile time. You can say
''''NNNNoooowwww iiiissss tttthhhheeee ttttiiiimmmmeeee ffffoooorrrr aaaallllllll'''' .... """"\\\\nnnn"""" ....
''''ggggoooooooodddd mmmmeeeennnn ttttoooo ccccoooommmmeeee ttttoooo....''''
and this all reduces to one string internally. Likewise,
if you say
ffffoooorrrreeeeaaaacccchhhh $$$$ffffiiiilllleeee ((((@@@@ffffiiiilllleeeennnnaaaammmmeeeessss)))) {{{{
iiiiffff ((((----ssss $$$$ffffiiiilllleeee >>>> 5555 ++++ 111100000000 **** 2222********11116666)))) {{{{ ............ }}}}
}}}}
the compiler will pre-compute the number that expression
represents so that the interpreter won't have to.
IIIInnnntttteeeeggggeeeerrrr aaaarrrriiiitttthhhhmmmmeeeettttiiiicccc
By default Perl assumes that it must do most of its
arithmetic in floating point. But by saying
uuuusssseeee iiiinnnntttteeeeggggeeeerrrr;;;;
you may tell the compiler that it's okay to use integer
operations from here to the end of the enclosing BLOCK.
An inner BLOCK may countermand this by saying
nnnnoooo iiiinnnntttteeeeggggeeeerrrr;;;;
which lasts until the end of that BLOCK.
13/Feb/96 perl 5.002 with 23