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 >
Text File  |  1996-03-02  |  93KB  |  1,519 lines

  1.  
  2.  
  3.  
  4. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  5.  
  6.  
  7. NNNNAAAAMMMMEEEE
  8.        perlop - Perl operators and precedence
  9.  
  10. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  11.        Perl operators have the following associativity and
  12.        precedence, listed from highest precedence to lowest.
  13.        Note that all operators borrowed from C keep the same
  14.        precedence relationship with each other, even where C's
  15.        precedence is slightly screwy.  (This makes learning Perl
  16.        easier for C folks.)  With very few exceptions, these all
  17.        operate on scalar values only, not array values.
  18.  
  19.            lllleeeefffftttt        tttteeeerrrrmmmmssss aaaannnndddd lllliiiisssstttt ooooppppeeeerrrraaaattttoooorrrrssss ((((lllleeeeffffttttwwwwaaaarrrrdddd))))
  20.            lllleeeefffftttt        ---->>>>
  21.            nnnnoooonnnnaaaassssssssoooocccc    ++++++++ --------
  22.            rrrriiiigggghhhhtttt       ********
  23.            rrrriiiigggghhhhtttt       !!!! ~~~~ \\\\ aaaannnndddd uuuunnnnaaaarrrryyyy ++++ aaaannnndddd ----
  24.            lllleeeefffftttt        ====~~~~ !!!!~~~~
  25.            lllleeeefffftttt        **** //// %%%% xxxx
  26.            lllleeeefffftttt        ++++ ---- ....
  27.            lllleeeefffftttt        <<<<<<<< >>>>>>>>
  28.            nnnnoooonnnnaaaassssssssoooocccc    nnnnaaaammmmeeeedddd uuuunnnnaaaarrrryyyy ooooppppeeeerrrraaaattttoooorrrrssss
  29.            nnnnoooonnnnaaaassssssssoooocccc    <<<< >>>> <<<<==== >>>>==== lllltttt ggggtttt lllleeee ggggeeee
  30.            nnnnoooonnnnaaaassssssssoooocccc    ======== !!!!==== <<<<====>>>> eeeeqqqq nnnneeee ccccmmmmpppp
  31.            lllleeeefffftttt        &&&&
  32.            lllleeeefffftttt        |||| ^^^^
  33.            lllleeeefffftttt        &&&&&&&&
  34.            lllleeeefffftttt        ||||||||
  35.            nnnnoooonnnnaaaassssssssoooocccc    ........
  36.            rrrriiiigggghhhhtttt       ????::::
  37.            rrrriiiigggghhhhtttt       ==== ++++==== ----==== ****==== eeeettttcccc....
  38.            lllleeeefffftttt        ,,,, ====>>>>
  39.            nnnnoooonnnnaaaassssssssoooocccc    lllliiiisssstttt ooooppppeeeerrrraaaattttoooorrrrssss ((((rrrriiiigggghhhhttttwwwwaaaarrrrdddd))))
  40.            rrrriiiigggghhhhtttt       nnnnooootttt
  41.            lllleeeefffftttt        aaaannnndddd
  42.            lllleeeefffftttt        oooorrrr xxxxoooorrrr
  43.  
  44.        In the following sections, these operators are covered in
  45.        precedence order.
  46.  
  47. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  48.        TTTTeeeerrrrmmmmssss aaaannnndddd LLLLiiiisssstttt OOOOppppeeeerrrraaaattttoooorrrrssss ((((LLLLeeeeffffttttwwwwaaaarrrrdddd))))
  49.  
  50.        Any TERM is of highest precedence of Perl.  These includes
  51.        variables, quote and quotelike operators, any expression
  52.        in parentheses, and any function whose arguments are
  53.        parenthesized.  Actually, there aren't really functions in
  54.        this sense, just list operators and unary operators
  55.        behaving as functions because you put parentheses around
  56.        the arguments.  These are all documented in the _p_e_r_l_f_u_n_c
  57.        manpage.
  58.  
  59.        If any list operator (_p_r_i_n_t_(_), etc.) or any unary operator
  60.        (_c_h_d_i_r_(_), etc.)  is followed by a left parenthesis as the
  61.  
  62.  
  63.  
  64. 13/Feb/96                perl 5.002 with                        1
  65.  
  66.  
  67.  
  68.  
  69.  
  70. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  71.  
  72.  
  73.        next token, the operator and arguments within parentheses
  74.        are taken to be of highest precedence, just like a normal
  75.        function call.
  76.  
  77.        In the absence of parentheses, the precedence of list
  78.        operators such as pppprrrriiiinnnntttt, ssssoooorrrrtttt, or cccchhhhmmmmoooodddd is either very
  79.        high or very low depending on whether you look at the left
  80.        side of operator or the right side of it.  For example, in
  81.  
  82.            @@@@aaaarrrryyyy ==== ((((1111,,,, 3333,,,, ssssoooorrrrtttt 4444,,,, 2222))));;;;
  83.            pppprrrriiiinnnntttt @@@@aaaarrrryyyy;;;;         #### pppprrrriiiinnnnttttssss 1111333322224444
  84.  
  85.        the commas on the right of the sort are evaluated before
  86.        the sort, but the commas on the left are evaluated after.
  87.        In other words, list operators tend to gobble up all the
  88.        arguments that follow them, and then act like a simple
  89.        TERM with regard to the preceding expression.  Note that
  90.        you have to be careful with parens:
  91.  
  92.            #### TTTThhhheeeesssseeee eeeevvvvaaaalllluuuuaaaatttteeee eeeexxxxiiiitttt bbbbeeeeffffoooorrrreeee ddddooooiiiinnnngggg tttthhhheeee pppprrrriiiinnnntttt::::
  93.            pppprrrriiiinnnntttt(((($$$$ffffoooooooo,,,, eeeexxxxiiiitttt))));;;;  #### OOOObbbbvvvviiiioooouuuussssllllyyyy nnnnooootttt wwwwhhhhaaaatttt yyyyoooouuuu wwwwaaaannnntttt....
  94.            pppprrrriiiinnnntttt $$$$ffffoooooooo,,,, eeeexxxxiiiitttt;;;;   #### NNNNoooorrrr iiiissss tttthhhhiiiissss....
  95.  
  96.            #### TTTThhhheeeesssseeee ddddoooo tttthhhheeee pppprrrriiiinnnntttt bbbbeeeeffffoooorrrreeee eeeevvvvaaaalllluuuuaaaattttiiiinnnngggg eeeexxxxiiiitttt::::
  97.            ((((pppprrrriiiinnnntttt $$$$ffffoooooooo)))),,,, eeeexxxxiiiitttt;;;; #### TTTThhhhiiiissss iiiissss wwwwhhhhaaaatttt yyyyoooouuuu wwwwaaaannnntttt....
  98.            pppprrrriiiinnnntttt(((($$$$ffffoooooooo)))),,,, eeeexxxxiiiitttt;;;;  #### OOOOrrrr tttthhhhiiiissss....
  99.            pppprrrriiiinnnntttt (((($$$$ffffoooooooo)))),,,, eeeexxxxiiiitttt;;;; #### OOOOrrrr eeeevvvveeeennnn tttthhhhiiiissss....
  100.  
  101.        Also note that
  102.  
  103.            pppprrrriiiinnnntttt (((($$$$ffffoooooooo &&&& 222255555555)))) ++++ 1111,,,, """"\\\\nnnn"""";;;;
  104.  
  105.        probably doesn't do what you expect at first glance.  See
  106.        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
  107.        of this.
  108.  
  109.        Also parsed as terms are the ddddoooo {{{{}}}} and eeeevvvvaaaallll {{{{}}}} constructs,
  110.        as well as subroutine and method calls, and the anonymous
  111.        constructors [[[[]]]] and {{{{}}}}.
  112.  
  113.        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
  114.        toward the end of this section, as well as the section on
  115.        _I_/_O _O_p_e_r_a_t_o_r_s.
  116.  
  117.        TTTThhhheeee AAAArrrrrrrroooowwww OOOOppppeeeerrrraaaattttoooorrrr
  118.  
  119.        Just as in C and C++, "---->>>>" is an infix dereference
  120.        operator.  If the right side is either a [[[[............]]]] or {{{{............}}}}
  121.        subscript, then the left side must be either a hard or
  122.        symbolic reference to an array or hash (or a location
  123.        capable of holding a hard reference, if it's an lvalue
  124.        (assignable)).  See the _p_e_r_l_r_e_f manpage.
  125.  
  126.        Otherwise, the right side is a method name or a simple
  127.  
  128.  
  129.  
  130. 13/Feb/96                perl 5.002 with                        2
  131.  
  132.  
  133.  
  134.  
  135.  
  136. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  137.  
  138.  
  139.        scalar variable containing the method name, and the left
  140.        side must either be an object (a blessed reference) or a
  141.        class name (that is, a package name).  See the _p_e_r_l_o_b_j
  142.        manpage.
  143.  
  144.        AAAAuuuuttttooooiiiinnnnccccrrrreeeemmmmeeeennnntttt aaaannnndddd AAAAuuuuttttooooddddeeeeccccrrrreeeemmmmeeeennnntttt
  145.  
  146.        "++" and "--" work as in C.  That is, if placed before a
  147.        variable, they increment or decrement the variable before
  148.        returning the value, and if placed after, increment or
  149.        decrement the variable after returning the value.
  150.  
  151.        The autoincrement operator has a little extra built-in
  152.        magic to it.  If you increment a variable that is numeric,
  153.        or that has ever been used in a numeric context, you get a
  154.        normal increment.  If, however, the variable has only been
  155.        used in string contexts since it was set, and has a value
  156.        that is not null and matches the pattern ////^^^^[[[[aaaa----zzzzAAAA----
  157.        ZZZZ]]]]****[[[[0000----9999]]]]****$$$$////, the increment is done as a string, preserving
  158.        each character within its range, with carry:
  159.  
  160.            pppprrrriiiinnnntttt ++++++++(((($$$$ffffoooooooo ==== ''''99999999''''))));;;;      #### pppprrrriiiinnnnttttssss ''''111100000000''''
  161.            pppprrrriiiinnnntttt ++++++++(((($$$$ffffoooooooo ==== ''''aaaa0000''''))));;;;      #### pppprrrriiiinnnnttttssss ''''aaaa1111''''
  162.            pppprrrriiiinnnntttt ++++++++(((($$$$ffffoooooooo ==== ''''AAAAzzzz''''))));;;;      #### pppprrrriiiinnnnttttssss ''''BBBBaaaa''''
  163.            pppprrrriiiinnnntttt ++++++++(((($$$$ffffoooooooo ==== ''''zzzzzzzz''''))));;;;      #### pppprrrriiiinnnnttttssss ''''aaaaaaaaaaaa''''
  164.  
  165.        The autodecrement operator is not magical.
  166.  
  167.        EEEExxxxppppoooonnnneeeennnnttttiiiiaaaattttiiiioooonnnn
  168.  
  169.        Binary "**" is the exponentiation operator.  Note that it
  170.        binds even more tightly than unary minus, so -2**4 is
  171.        -(2**4), not (-2)**4. (This is implemented using C's
  172.        _p_o_w(3) function, which actually works on doubles
  173.        internally.)
  174.  
  175.        SSSSyyyymmmmbbbboooolllliiiicccc UUUUnnnnaaaarrrryyyy OOOOppppeeeerrrraaaattttoooorrrrssss
  176.  
  177.        Unary "!" performs logical negation, i.e. "not".  See also
  178.        nnnnooootttt for a lower precedence version of this.
  179.  
  180.        Unary "-" performs arithmetic negation if the operand is
  181.        numeric.  If the operand is an identifier, a string
  182.        consisting of a minus sign concatenated with the
  183.        identifier is returned.  Otherwise, if the string starts
  184.        with a plus or minus, a string starting with the opposite
  185.        sign is returned.  One effect of these rules is that
  186.        ----bbbbaaaarrrreeeewwwwoooorrrrdddd is equivalent to """"----bbbbaaaarrrreeeewwwwoooorrrrdddd"""".
  187.  
  188.        Unary "~" performs bitwise negation, i.e. 1's complement.
  189.  
  190.        Unary "+" has no effect whatsoever, even on strings.  It
  191.        is useful syntactically for separating a function name
  192.        from a parenthesized expression that would otherwise be
  193.  
  194.  
  195.  
  196. 13/Feb/96                perl 5.002 with                        3
  197.  
  198.  
  199.  
  200.  
  201.  
  202. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  203.  
  204.  
  205.        interpreted as the complete list of function arguments.
  206.        (See examples above under the section on _L_i_s_t _O_p_e_r_a_t_o_r_s.)
  207.  
  208.        Unary "\" creates a reference to whatever follows it.  See
  209.        the _p_e_r_l_r_e_f manpage.  Do not confuse this behavior with
  210.        the behavior of backslash within a string, although both
  211.        forms do convey the notion of protecting the next thing
  212.        from interpretation.
  213.  
  214.        BBBBiiiinnnnddddiiiinnnngggg OOOOppppeeeerrrraaaattttoooorrrrssss
  215.  
  216.        Binary "=~" binds a scalar expression to a pattern match.
  217.        Certain operations search or modify the string $$$$____ by
  218.        default.  This operator makes that kind of operation work
  219.        on some other string.  The right argument is a search
  220.        pattern, substitution, or translation.  The left argument
  221.        is what is supposed to be searched, substituted, or
  222.        translated instead of the default $$$$____.  The return value
  223.        indicates the success of the operation.  (If the right
  224.        argument is an expression rather than a search pattern,
  225.        substitution, or translation, it is interpreted as a
  226.        search pattern at run time.  This is less efficient than
  227.        an explicit search, since the pattern must be compiled
  228.        every time the expression is evaluated--unless you've used
  229.        ////oooo.)
  230.  
  231.        Binary "!~" is just like "=~" except the return value is
  232.        negated in the logical sense.
  233.  
  234.        MMMMuuuullllttttiiiipppplllliiiiccccaaaattttiiiivvvveeee OOOOppppeeeerrrraaaattttoooorrrrssss
  235.  
  236.        Binary "*" multiplies two numbers.
  237.  
  238.        Binary "/" divides two numbers.
  239.  
  240.        Binary "%" computes the modulus of the two numbers.
  241.  
  242.        Binary "x" is the repetition operator.  In a scalar
  243.        context, it returns a string consisting of the left
  244.        operand repeated the number of times specified by the
  245.        right operand.  In a list context, if the left operand is
  246.        a list in parens, it repeats the list.
  247.  
  248.            pppprrrriiiinnnntttt ''''----'''' xxxx 88880000;;;;             #### pppprrrriiiinnnntttt rrrroooowwww ooooffff ddddaaaasssshhhheeeessss
  249.  
  250.            pppprrrriiiinnnntttt """"\\\\tttt"""" xxxx (((($$$$ttttaaaabbbb////8888)))),,,, '''' '''' xxxx (((($$$$ttttaaaabbbb%%%%8888))));;;;      #### ttttaaaabbbb oooovvvveeeerrrr
  251.  
  252.            @@@@oooonnnneeeessss ==== ((((1111)))) xxxx 88880000;;;;           #### aaaa lllliiiisssstttt ooooffff 88880000 1111''''ssss
  253.            @@@@oooonnnneeeessss ==== ((((5555)))) xxxx @@@@oooonnnneeeessss;;;;        #### sssseeeetttt aaaallllllll eeeelllleeeemmmmeeeennnnttttssss ttttoooo 5555
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262. 13/Feb/96                perl 5.002 with                        4
  263.  
  264.  
  265.  
  266.  
  267.  
  268. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  269.  
  270.  
  271.        AAAAddddddddiiiittttiiiivvvveeee OOOOppppeeeerrrraaaattttoooorrrrssss
  272.  
  273.        Binary "+" returns the sum of two numbers.
  274.  
  275.        Binary "-" returns the difference of two numbers.
  276.  
  277.        Binary "." concatenates two strings.
  278.  
  279.        SSSShhhhiiiifffftttt OOOOppppeeeerrrraaaattttoooorrrrssss
  280.  
  281.        Binary "<<" returns the value of its left argument shifted
  282.        left by the number of bits specified by the right
  283.        argument.  Arguments should be integers.
  284.  
  285.        Binary ">>" returns the value of its left argument shifted
  286.        right by the number of bits specified by the right
  287.        argument.  Arguments should be integers.
  288.  
  289.        NNNNaaaammmmeeeedddd UUUUnnnnaaaarrrryyyy OOOOppppeeeerrrraaaattttoooorrrrssss
  290.  
  291.        The various named unary operators are treated as functions
  292.        with one argument, with optional parentheses.  These
  293.        include the filetest operators, like ----ffff, ----MMMM, etc.  See the
  294.        _p_e_r_l_f_u_n_c manpage.
  295.  
  296.        If any list operator (_p_r_i_n_t_(_), etc.) or any unary operator
  297.        (_c_h_d_i_r_(_), etc.)  is followed by a left parenthesis as the
  298.        next token, the operator and arguments within parentheses
  299.        are taken to be of highest precedence, just like a normal
  300.        function call.  Examples:
  301.  
  302.            cccchhhhddddiiiirrrr $$$$ffffoooooooo    |||||||| ddddiiiieeee;;;;       #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) |||||||| ddddiiiieeee
  303.            cccchhhhddddiiiirrrr(((($$$$ffffoooooooo))))   |||||||| ddddiiiieeee;;;;       #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) |||||||| ddddiiiieeee
  304.            cccchhhhddddiiiirrrr (((($$$$ffffoooooooo))))  |||||||| ddddiiiieeee;;;;       #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) |||||||| ddddiiiieeee
  305.            cccchhhhddddiiiirrrr ++++(((($$$$ffffoooooooo)))) |||||||| ddddiiiieeee;;;;       #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) |||||||| ddddiiiieeee
  306.  
  307.        but, because * is higher precedence than ||:
  308.  
  309.            cccchhhhddddiiiirrrr $$$$ffffoooooooo **** 22220000;;;;    #### cccchhhhddddiiiirrrr (((($$$$ffffoooooooo **** 22220000))))
  310.            cccchhhhddddiiiirrrr(((($$$$ffffoooooooo)))) **** 22220000;;;;   #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) **** 22220000
  311.            cccchhhhddddiiiirrrr (((($$$$ffffoooooooo)))) **** 22220000;;;;  #### ((((cccchhhhddddiiiirrrr $$$$ffffoooooooo)))) **** 22220000
  312.            cccchhhhddddiiiirrrr ++++(((($$$$ffffoooooooo)))) **** 22220000;;;; #### cccchhhhddddiiiirrrr (((($$$$ffffoooooooo **** 22220000))))
  313.  
  314.            rrrraaaannnndddd 11110000 **** 22220000;;;;       #### rrrraaaannnndddd ((((11110000 **** 22220000))))
  315.            rrrraaaannnndddd((((11110000)))) **** 22220000;;;;      #### ((((rrrraaaannnndddd 11110000)))) **** 22220000
  316.            rrrraaaannnndddd ((((11110000)))) **** 22220000;;;;     #### ((((rrrraaaannnndddd 11110000)))) **** 22220000
  317.            rrrraaaannnndddd ++++((((11110000)))) **** 22220000;;;;    #### rrrraaaannnndddd ((((11110000 **** 22220000))))
  318.  
  319.        See also the section on _L_i_s_t _O_p_e_r_a_t_o_r_s.
  320.  
  321.        RRRReeeellllaaaattttiiiioooonnnnaaaallll OOOOppppeeeerrrraaaattttoooorrrrssss
  322.  
  323.        Binary "<" returns true if the left argument is
  324.        numerically less than the right argument.
  325.  
  326.  
  327.  
  328. 13/Feb/96                perl 5.002 with                        5
  329.  
  330.  
  331.  
  332.  
  333.  
  334. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  335.  
  336.  
  337.        Binary ">" returns true if the left argument is
  338.        numerically greater than the right argument.
  339.  
  340.        Binary "<=" returns true if the left argument is
  341.        numerically less than or equal to the right argument.
  342.  
  343.        Binary ">=" returns true if the left argument is
  344.        numerically greater than or equal to the right argument.
  345.  
  346.        Binary "lt" returns true if the left argument is
  347.        stringwise less than the right argument.
  348.  
  349.        Binary "gt" returns true if the left argument is
  350.        stringwise greater than the right argument.
  351.  
  352.        Binary "le" returns true if the left argument is
  353.        stringwise less than or equal to the right argument.
  354.  
  355.        Binary "ge" returns true if the left argument is
  356.        stringwise greater than or equal to the right argument.
  357.  
  358.        EEEEqqqquuuuaaaalllliiiittttyyyy OOOOppppeeeerrrraaaattttoooorrrrssss
  359.  
  360.        Binary "==" returns true if the left argument is
  361.        numerically equal to the right argument.
  362.  
  363.        Binary "!=" returns true if the left argument is
  364.        numerically not equal to the right argument.
  365.  
  366.        Binary "<=>" returns -1, 0, or 1 depending on whether the
  367.        left argument is numerically less than, equal to, or
  368.        greater than the right argument.
  369.  
  370.        Binary "eq" returns true if the left argument is
  371.        stringwise equal to the right argument.
  372.  
  373.        Binary "ne" returns true if the left argument is
  374.        stringwise not equal to the right argument.
  375.  
  376.        Binary "cmp" returns -1, 0, or 1 depending on whether the
  377.        left argument is stringwise less than, equal to, or
  378.        greater than the right argument.
  379.  
  380.        BBBBiiiittttwwwwiiiisssseeee AAAAnnnndddd
  381.  
  382.        Binary "&" returns its operators ANDed together bit by
  383.        bit.
  384.  
  385.        BBBBiiiittttwwwwiiiisssseeee OOOOrrrr aaaannnndddd EEEExxxxcccclllluuuussssiiiivvvveeee OOOOrrrr
  386.  
  387.        Binary "|" returns its operators ORed together bit by bit.
  388.  
  389.        Binary "^" returns its operators XORed together bit by
  390.        bit.
  391.  
  392.  
  393.  
  394. 13/Feb/96                perl 5.002 with                        6
  395.  
  396.  
  397.  
  398.  
  399.  
  400. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  401.  
  402.  
  403.        CCCC----ssssttttyyyylllleeee LLLLooooggggiiiiccccaaaallll AAAAnnnndddd
  404.  
  405.        Binary "&&" performs a short-circuit logical AND
  406.        operation.  That is, if the left operand is false, the
  407.        right operand is not even evaluated.  Scalar or list
  408.        context propagates down to the right operand if it is
  409.        evaluated.
  410.  
  411.        CCCC----ssssttttyyyylllleeee LLLLooooggggiiiiccccaaaallll OOOOrrrr
  412.  
  413.        Binary "||" performs a short-circuit logical OR operation.
  414.        That is, if the left operand is true, the right operand is
  415.        not even evaluated.  Scalar or list context propagates
  416.        down to the right operand if it is evaluated.
  417.  
  418.        The |||||||| and &&&&&&&& operators differ from C's in that, rather
  419.        than returning 0 or 1, they return the last value
  420.        evaluated.  Thus, a reasonably portable way to find out
  421.        the home directory (assuming it's not "0") might be:
  422.  
  423.            $$$$hhhhoooommmmeeee ==== $$$$EEEENNNNVVVV{{{{''''HHHHOOOOMMMMEEEE''''}}}} |||||||| $$$$EEEENNNNVVVV{{{{''''LLLLOOOOGGGGDDDDIIIIRRRR''''}}}} ||||||||
  424.                ((((ggggeeeettttppppwwwwuuuuiiiidddd(((($$$$<<<<))))))))[[[[7777]]]] |||||||| ddddiiiieeee """"YYYYoooouuuu''''rrrreeee hhhhoooommmmeeeelllleeeessssssss!!!!\\\\nnnn"""";;;;
  425.  
  426.        As more readable alternatives to &&&&&&&& and ||||||||, Perl provides
  427.        "and" and "or" operators (see below).  The short-circuit
  428.        behavior is identical.  The precedence of "and" and "or"
  429.        is much lower, however, so that you can safely use them
  430.        after a list operator without the need for parentheses:
  431.  
  432.            uuuunnnnlllliiiinnnnkkkk """"aaaallllpppphhhhaaaa"""",,,, """"bbbbeeeettttaaaa"""",,,, """"ggggaaaammmmmmmmaaaa""""
  433.                    oooorrrr ggggrrrriiiippppeeee(((()))),,,, nnnneeeexxxxtttt LLLLIIIINNNNEEEE;;;;
  434.  
  435.        With the C-style operators that would have been written
  436.        like this:
  437.  
  438.            uuuunnnnlllliiiinnnnkkkk((((""""aaaallllpppphhhhaaaa"""",,,, """"bbbbeeeettttaaaa"""",,,, """"ggggaaaammmmmmmmaaaa""""))))
  439.                    |||||||| ((((ggggrrrriiiippppeeee(((()))),,,, nnnneeeexxxxtttt LLLLIIIINNNNEEEE))));;;;
  440.  
  441.  
  442.        RRRRaaaannnnggggeeee OOOOppppeeeerrrraaaattttoooorrrr
  443.  
  444.        Binary ".." is the range operator, which is really two
  445.        different operators depending on the context.  In a list
  446.        context, it returns an array of values counting (by ones)
  447.        from the left value to the right value.  This is useful
  448.        for writing ffffoooorrrr ((((1111........11110000)))) loops and for doing slice
  449.        operations on arrays.  Be aware that under the current
  450.        implementation, a temporary array is created, so you'll
  451.        burn a lot of memory if you write something like this:
  452.  
  453.            ffffoooorrrr ((((1111 ........ 1111____000000000000____000000000000)))) {{{{
  454.                #### ccccooooddddeeee
  455.            }}}}
  456.  
  457.  
  458.  
  459.  
  460. 13/Feb/96                perl 5.002 with                        7
  461.  
  462.  
  463.  
  464.  
  465.  
  466. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  467.  
  468.  
  469.        In a scalar context, ".." returns a boolean value.  The
  470.        operator is bistable, like a flip-flop, and emulates the
  471.        line-range (comma) operator of sssseeeedddd, aaaawwwwkkkk, and various
  472.        editors.  Each ".." operator maintains its own boolean
  473.        state.  It is false as long as its left operand is false.
  474.        Once the left operand is true, the range operator stays
  475.        true until the right operand is true, _A_F_T_E_R which the
  476.        range operator becomes false again.  (It doesn't become
  477.        false till the next time the range operator is evaluated.
  478.        It can test the right operand and become false on the same
  479.        evaluation it became true (as in aaaawwwwkkkk), but it still
  480.        returns true once.  If you don't want it to test the right
  481.        operand till the next evaluation (as in sssseeeedddd), use three
  482.        dots ("...") instead of two.)  The right operand is not
  483.        evaluated while the operator is in the "false" state, and
  484.        the left operand is not evaluated while the operator is in
  485.        the "true" state.  The precedence is a little lower than
  486.        || and &&.  The value returned is either the null string
  487.        for false, or a sequence number (beginning with 1) for
  488.        true.  The sequence number is reset for each range
  489.        encountered.  The final sequence number in a range has the
  490.        string "E0" appended to it, which doesn't affect its
  491.        numeric value, but gives you something to search for if
  492.        you want to exclude the endpoint.  You can exclude the
  493.        beginning point by waiting for the sequence number to be
  494.        greater than 1.  If either operand of scalar ".." is a
  495.        numeric literal, that operand is implicitly compared to
  496.        the $$$$.... variable, the current line number.  Examples:
  497.  
  498.        As a scalar operator:
  499.  
  500.            iiiiffff ((((111100001111 ........ 222200000000)))) {{{{ pppprrrriiiinnnntttt;;;; }}}}  #### pppprrrriiiinnnntttt 2222nnnndddd hhhhuuuunnnnddddrrrreeeedddd lllliiiinnnneeeessss
  501.            nnnneeeexxxxtttt lllliiiinnnneeee iiiiffff ((((1111 ........ ////^^^^$$$$////))));;;;   #### sssskkkkiiiipppp hhhheeeeaaaaddddeeeerrrr lllliiiinnnneeeessss
  502.            ssss////^^^^////>>>> //// iiiiffff ((((////^^^^$$$$//// ........ eeeeooooffff(((())))))));;;; #### qqqquuuuooootttteeee bbbbooooddddyyyy
  503.  
  504.        As a list operator:
  505.  
  506.            ffffoooorrrr ((((111100001111 ........ 222200000000)))) {{{{ pppprrrriiiinnnntttt;;;; }}}} #### pppprrrriiiinnnntttt $$$$____ 111100000000 ttttiiiimmmmeeeessss
  507.            @@@@ffffoooooooo ==== @@@@ffffoooooooo[[[[$$$$[[[[ ........ $$$$####ffffoooooooo]]]];;;;   #### aaaannnn eeeexxxxppppeeeennnnssssiiiivvvveeee nnnnoooo----oooopppp
  508.            @@@@ffffoooooooo ==== @@@@ffffoooooooo[[[[$$$$####ffffoooooooo----4444 ........ $$$$####ffffoooooooo]]]];;;;      #### sssslllliiiicccceeee llllaaaasssstttt 5555 iiiitttteeeemmmmssss
  509.  
  510.        The range operator (in a list context) makes use of the
  511.        magical autoincrement algorithm if the operaands are
  512.        strings.  You can say
  513.  
  514.            @@@@aaaallllpppphhhhaaaabbbbeeeetttt ==== ((((''''AAAA'''' ........ ''''ZZZZ''''))));;;;
  515.  
  516.        to get all the letters of the alphabet, or
  517.  
  518.            $$$$hhhheeeexxxxddddiiiiggggiiiitttt ==== ((((0000 ........ 9999,,,, ''''aaaa'''' ........ ''''ffff''''))))[[[[$$$$nnnnuuuummmm &&&& 11115555]]]];;;;
  519.  
  520.        to get a hexadecimal digit, or
  521.  
  522.            @@@@zzzz2222 ==== ((((''''00001111'''' ........ ''''33331111''''))));;;;  pppprrrriiiinnnntttt $$$$zzzz2222[[[[$$$$mmmmddddaaaayyyy]]]];;;;
  523.  
  524.  
  525.  
  526. 13/Feb/96                perl 5.002 with                        8
  527.  
  528.  
  529.  
  530.  
  531.  
  532. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  533.  
  534.  
  535.        to get dates with leading zeros.  If the final value
  536.        specified is not in the sequence that the magical
  537.        increment would produce, the sequence goes until the next
  538.        value would be longer than the final value specified.
  539.  
  540.        CCCCoooonnnnddddiiiittttiiiioooonnnnaaaallll OOOOppppeeeerrrraaaattttoooorrrr
  541.  
  542.        Ternary "?:" is the conditional operator, just as in C.
  543.        It works much like an if-then-else.  If the argument
  544.        before the ? is true, the argument before the : is
  545.        returned, otherwise the argument after the : is returned.
  546.        For example:
  547.  
  548.            pppprrrriiiinnnnttttffff """"IIII hhhhaaaavvvveeee %%%%dddd ddddoooogggg%%%%ssss....\\\\nnnn"""",,,, $$$$nnnn,,,,
  549.                    (((($$$$nnnn ======== 1111)))) ???? '''''''' :::: """"ssss"""";;;;
  550.  
  551.        Scalar or list context propagates downward into the 2nd or
  552.        3rd argument, whichever is selected.
  553.  
  554.            $$$$aaaa ==== $$$$ooookkkk ???? $$$$bbbb :::: $$$$cccc;;;;  #### ggggeeeetttt aaaa ssssccccaaaallllaaaarrrr
  555.            @@@@aaaa ==== $$$$ooookkkk ???? @@@@bbbb :::: @@@@cccc;;;;  #### ggggeeeetttt aaaannnn aaaarrrrrrrraaaayyyy
  556.            $$$$aaaa ==== $$$$ooookkkk ???? @@@@bbbb :::: @@@@cccc;;;;  #### ooooooooppppssss,,,, tttthhhhaaaatttt''''ssss jjjjuuuusssstttt aaaa ccccoooouuuunnnntttt!!!!
  557.  
  558.        The operator may be assigned to if both the 2nd and 3rd
  559.        arguments are legal lvalues (meaning that you can assign
  560.        to them):
  561.  
  562.            (((($$$$aaaa____oooorrrr____bbbb ???? $$$$aaaa :::: $$$$bbbb)))) ==== $$$$cccc;;;;
  563.  
  564.        This is not necessarily guaranteed to contribute to the
  565.        readability of your program.
  566.  
  567.        AAAAssssssssiiiiggggnnnnmmmmeeeennnntttt OOOOppppeeeerrrraaaattttoooorrrrssss
  568.  
  569.        "=" is the ordinary assignment operator.
  570.  
  571.        Assignment operators work as in C.  That is,
  572.  
  573.            $$$$aaaa ++++==== 2222;;;;
  574.  
  575.        is equivalent to
  576.  
  577.            $$$$aaaa ==== $$$$aaaa ++++ 2222;;;;
  578.  
  579.        although without duplicating any side effects that
  580.        dereferencing the lvalue might trigger, such as from
  581.        _t_i_e_(_).  Other assignment operators work similarly.  The
  582.        following are recognized:
  583.  
  584.            ********====    ++++====    ****====    &&&&====    <<<<<<<<====    &&&&&&&&====
  585.                   ----====    ////====    ||||====    >>>>>>>>====    ||||||||====
  586.                   ....====    %%%%====    ^^^^====
  587.                         xxxx====
  588.  
  589.  
  590.  
  591.  
  592. 13/Feb/96                perl 5.002 with                        9
  593.  
  594.  
  595.  
  596.  
  597.  
  598. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  599.  
  600.  
  601.        Note that while these are grouped by family, they all have
  602.        the precedence of assignment.
  603.  
  604.        Unlike in C, the assignment operator produces a valid
  605.        lvalue.  Modifying an assignment is equivalent to doing
  606.        the assignment and then modifying the variable that was
  607.        assigned to.  This is useful for modifying a copy of
  608.        something, like this:
  609.  
  610.            (((($$$$ttttmmmmpppp ==== $$$$gggglllloooobbbbaaaallll)))) ====~~~~ ttttrrrr [[[[AAAA----ZZZZ]]]] [[[[aaaa----zzzz]]]];;;;
  611.  
  612.        Likewise,
  613.  
  614.            (((($$$$aaaa ++++==== 2222)))) ****==== 3333;;;;
  615.  
  616.        is equivalent to
  617.  
  618.            $$$$aaaa ++++==== 2222;;;;
  619.            $$$$aaaa ****==== 3333;;;;
  620.  
  621.  
  622.        CCCCoooommmmmmmmaaaa OOOOppppeeeerrrraaaattttoooorrrr
  623.  
  624.        Binary "," is the comma operator.  In a scalar context it
  625.        evaluates its left argument, throws that value away, then
  626.        evaluates its right argument and returns that value.  This
  627.        is just like C's comma operator.
  628.  
  629.        In a list context, it's just the list argument separator,
  630.        and inserts both its arguments into the list.
  631.  
  632.        The => digraph is mostly just a synonym for the comma
  633.        operator.  It's useful for documenting arguments that come
  634.        in pairs.  As of release 5.001, it also forces any word to
  635.        the left of it to be interpreted as a string.
  636.  
  637.        LLLLiiiisssstttt OOOOppppeeeerrrraaaattttoooorrrrssss ((((RRRRiiiigggghhhhttttwwwwaaaarrrrdddd))))
  638.  
  639.        On the right side of a list operator, it has very low
  640.        precedence, such that it controls all comma-separated
  641.        expressions found there.  The only operators with lower
  642.        precedence are the logical operators "and", "or", and
  643.        "not", which may be used to evaluate calls to list
  644.        operators without the need for extra parentheses:
  645.  
  646.            ooooppppeeeennnn HHHHAAAANNNNDDDDLLLLEEEE,,,, """"ffffiiiilllleeeennnnaaaammmmeeee""""
  647.                oooorrrr ddddiiiieeee """"CCCCaaaannnn''''tttt ooooppppeeeennnn:::: $$$$!!!!\\\\nnnn"""";;;;
  648.  
  649.        See also discussion of list operators in the section on
  650.        _L_i_s_t _O_p_e_r_a_t_o_r_s _(_L_e_f_t_w_a_r_d_).
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658. 13/Feb/96                perl 5.002 with                       10
  659.  
  660.  
  661.  
  662.  
  663.  
  664. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  665.  
  666.  
  667.        LLLLooooggggiiiiccccaaaallll NNNNooootttt
  668.  
  669.        Unary "not" returns the logical negation of the expression
  670.        to its right.  It's the equivalent of "!" except for the
  671.        very low precedence.
  672.  
  673.        LLLLooooggggiiiiccccaaaallll AAAAnnnndddd
  674.  
  675.        Binary "and" returns the logical conjunction of the two
  676.        surrounding expressions.  It's equivalent to && except for
  677.        the very low precedence.  This means that it short-
  678.        circuits: i.e. the right expression is evaluated only if
  679.        the left expression is true.
  680.  
  681.        LLLLooooggggiiiiccccaaaallll oooorrrr aaaannnndddd EEEExxxxcccclllluuuussssiiiivvvveeee OOOOrrrr
  682.  
  683.        Binary "or" returns the logical disjunction of the two
  684.        surrounding expressions.  It's equivalent to || except for
  685.        the very low precedence.  This means that it short-
  686.        circuits: i.e. the right expression is evaluated only if
  687.        the left expression is false.
  688.  
  689.        Binary "xor" returns the exclusive-OR of the two
  690.        surrounding expressions.  It cannot short circuit, of
  691.        course.
  692.  
  693.        CCCC OOOOppppeeeerrrraaaattttoooorrrrssss MMMMiiiissssssssiiiinnnngggg FFFFrrrroooommmm PPPPeeeerrrrllll
  694.  
  695.        Here is what C has that Perl doesn't:
  696.  
  697.        unary & Address-of operator.  (But see the "\" operator
  698.                for taking a reference.)
  699.  
  700.        unary * Dereference-address operator. (Perl's prefix
  701.                dereferencing operators are typed: $, @, %, and
  702.                &.)
  703.  
  704.        (TYPE)  Type casting operator.
  705.  
  706.        QQQQuuuuooootttteeee aaaannnndddd QQQQuuuuooootttteeeelllliiiikkkkeeee OOOOppppeeeerrrraaaattttoooorrrrssss
  707.  
  708.        While we usually think of quotes as literal values, in
  709.        Perl they function as operators, providing various kinds
  710.        of interpolating and pattern matching capabilities.  Perl
  711.        provides customary quote characters for these behaviors,
  712.        but also provides a way for you to choose your quote
  713.        character for any of them.  In the following table, a {{{{}}}}
  714.        represents any pair of delimiters you choose.  Non-
  715.        bracketing delimiters use the same character fore and aft,
  716.        but the 4 sorts of brackets (round, angle, square, curly)
  717.        will all nest.
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724. 13/Feb/96                perl 5.002 with                       11
  725.  
  726.  
  727.  
  728.  
  729.  
  730. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  731.  
  732.  
  733.            CCCCuuuussssttttoooommmmaaaarrrryyyy  GGGGeeeennnneeeerrrriiiicccc     MMMMeeeeaaaannnniiiinnnngggg    IIIInnnntttteeeerrrrppppoooollllaaaatttteeeessss
  734.                ''''''''       qqqq{{{{}}}}       LLLLiiiitttteeeerrrraaaallll         nnnnoooo
  735.                """"""""      qqqqqqqq{{{{}}}}       LLLLiiiitttteeeerrrraaaallll         yyyyeeeessss
  736.                ````````      qqqqxxxx{{{{}}}}       CCCCoooommmmmmmmaaaannnndddd         yyyyeeeessss
  737.                        qqqqwwww{{{{}}}}      WWWWoooorrrrdddd lllliiiisssstttt        nnnnoooo
  738.                ////////       mmmm{{{{}}}}    PPPPaaaatttttttteeeerrrrnnnn mmmmaaaattttcccchhhh      yyyyeeeessss
  739.                         ssss{{{{}}}}{{{{}}}}   SSSSuuuubbbbssssttttiiiittttuuuuttttiiiioooonnnn      yyyyeeeessss
  740.                        ttttrrrr{{{{}}}}{{{{}}}}   TTTTrrrraaaannnnssssllllaaaattttiiiioooonnnn       nnnnoooo
  741.  
  742.        For constructs that do interpolation, variables beginning
  743.        with "$$$$" or "@@@@" are interpolated, as are the following
  744.        sequences:
  745.  
  746.            \\\\tttt          ttttaaaabbbb
  747.            \\\\nnnn          nnnneeeewwwwlllliiiinnnneeee
  748.            \\\\rrrr          rrrreeeettttuuuurrrrnnnn
  749.            \\\\ffff          ffffoooorrrrmmmm ffffeeeeeeeedddd
  750.            \\\\bbbb          bbbbaaaacccckkkkssssppppaaaacccceeee
  751.            \\\\aaaa          aaaallllaaaarrrrmmmm ((((bbbbeeeellllllll))))
  752.            \\\\eeee          eeeessssccccaaaappppeeee
  753.            \\\\000033333333        ooooccccttttaaaallll cccchhhhaaaarrrr
  754.            \\\\xxxx1111bbbb        hhhheeeexxxx cccchhhhaaaarrrr
  755.            \\\\cccc[[[[         ccccoooonnnnttttrrrroooollll cccchhhhaaaarrrr
  756.            \\\\llll          lllloooowwwweeeerrrrccccaaaasssseeee nnnneeeexxxxtttt cccchhhhaaaarrrr
  757.            \\\\uuuu          uuuuppppppppeeeerrrrccccaaaasssseeee nnnneeeexxxxtttt cccchhhhaaaarrrr
  758.            \\\\LLLL          lllloooowwwweeeerrrrccccaaaasssseeee ttttiiiillllllll \\\\EEEE
  759.            \\\\UUUU          uuuuppppppppeeeerrrrccccaaaasssseeee ttttiiiillllllll \\\\EEEE
  760.            \\\\EEEE          eeeennnndddd ccccaaaasssseeee mmmmooooddddiiiiffffiiiiccccaaaattttiiiioooonnnn
  761.            \\\\QQQQ          qqqquuuuooootttteeee rrrreeeeggggeeeexxxxpppp mmmmeeeettttaaaacccchhhhaaaarrrraaaacccctttteeeerrrrssss ttttiiiillllllll \\\\EEEE
  762.  
  763.        Patterns are subject to an additional level of
  764.        interpretation as a regular expression.  This is done as a
  765.        second pass, after variables are interpolated, so that
  766.        regular expressions may be incorporated into the pattern
  767.        from the variables.  If this is not what you want, use \\\\QQQQ
  768.        to interpolate a variable literally.
  769.  
  770.        Apart from the above, there are no multiple levels of
  771.        interpolation.  In particular, contrary to the
  772.        expectations of shell programmers, backquotes do _N_O_T
  773.        interpolate within double quotes, nor do single quotes
  774.        impede evaluation of variables when used within double
  775.        quotes.
  776.  
  777.        RRRReeeeggggeeeexxxxpppp QQQQuuuuooootttteeeelllliiiikkkkeeee OOOOppppeeeerrrraaaattttoooorrrrssss
  778.  
  779.        Here are the quotelike operators that apply to pattern
  780.        matching and related activities.
  781.  
  782.        ?PATTERN?
  783.                This is just like the ////ppppaaaatttttttteeeerrrrnnnn//// search, except
  784.                that it matches only once between calls to the
  785.                _r_e_s_e_t_(_) operator.  This is a useful optimization
  786.                when you only want to see the first occurrence of
  787.  
  788.  
  789.  
  790. 13/Feb/96                perl 5.002 with                       12
  791.  
  792.  
  793.  
  794.  
  795.  
  796. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  797.  
  798.  
  799.                something in each file of a set of files, for
  800.                instance.  Only ????????  patterns local to the current
  801.                package are reset.
  802.  
  803.                This usage is vaguely deprecated, and may be
  804.                removed in some future version of Perl.
  805.  
  806.        m/PATTERN/gimosx
  807.  
  808.        /PATTERN/gimosx
  809.                Searches a string for a pattern match, and in a
  810.                scalar context returns true (1) or false ('').  If
  811.                no string is specified via the ====~~~~ or !!!!~~~~ operator,
  812.                the $$$$____ string is searched.  (The string specified
  813.                with ====~~~~ need not be an lvalue--it may be the
  814.                result of an expression evaluation, but remember
  815.                the ====~~~~ binds rather tightly.)  See also the _p_e_r_l_r_e
  816.                manpage.
  817.  
  818.                Options are:
  819.  
  820.                    gggg   MMMMaaaattttcccchhhh gggglllloooobbbbaaaallllllllyyyy,,,, iiii....eeee.... ffffiiiinnnndddd aaaallllllll ooooccccccccuuuurrrrrrrreeeennnncccceeeessss....
  821.                    iiii   DDDDoooo ccccaaaasssseeee----iiiinnnnsssseeeennnnssssiiiittttiiiivvvveeee ppppaaaatttttttteeeerrrrnnnn mmmmaaaattttcccchhhhiiiinnnngggg....
  822.                    mmmm   TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss mmmmuuuullllttttiiiipppplllleeee lllliiiinnnneeeessss....
  823.                    oooo   OOOOnnnnllllyyyy ccccoooommmmppppiiiilllleeee ppppaaaatttttttteeeerrrrnnnn oooonnnncccceeee....
  824.                    ssss   TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss ssssiiiinnnngggglllleeee lllliiiinnnneeee....
  825.                    xxxx   UUUUsssseeee eeeexxxxtttteeeennnnddddeeeedddd rrrreeeegggguuuullllaaaarrrr eeeexxxxpppprrrreeeessssssssiiiioooonnnnssss....
  826.  
  827.                If "/" is the delimiter then the initial mmmm is
  828.                optional.  With the mmmm you can use any pair of non-
  829.                alphanumeric, non-whitespace characters as
  830.                delimiters.  This is particularly useful for
  831.                matching Unix path names that contain "/", to
  832.                avoid LTS (leaning toothpick syndrome).
  833.  
  834.                PATTERN may contain variables, which will be
  835.                interpolated (and the pattern recompiled) every
  836.                time the pattern search is evaluated.  (Note that
  837.                $$$$)))) and $$$$|||| might not be interpolated because they
  838.                look like end-of-string tests.)  If you want such
  839.                a pattern to be compiled only once, add a ////oooo after
  840.                the trailing delimiter.  This avoids expensive
  841.                run-time recompilations, and is useful when the
  842.                value you are interpolating won't change over the
  843.                life of the script.  However, mentioning ////oooo
  844.                constitutes a promise that you won't change the
  845.                variables in the pattern.  If you change them,
  846.                Perl won't even notice.
  847.  
  848.                If the PATTERN evaluates to a null string, the
  849.                last successfully executed regular expression is
  850.                used instead.
  851.  
  852.                If used in a context that requires a list value, a
  853.  
  854.  
  855.  
  856. 13/Feb/96                perl 5.002 with                       13
  857.  
  858.  
  859.  
  860.  
  861.  
  862. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  863.  
  864.  
  865.                pattern match returns a list consisting of the
  866.                subexpressions matched by the parentheses in the
  867.                pattern, i.e. ($1, $$$$2222, $$$$3333...).  (Note that here $$$$1111
  868.                etc. are also set, and that this differs from Perl
  869.                4's behavior.)  If the match fails, a null array
  870.                is returned.  If the match succeeds, but there
  871.                were no parentheses, a list value of (1) is
  872.                returned.
  873.  
  874.                Examples:
  875.  
  876.                    ooooppppeeeennnn((((TTTTTTTTYYYY,,,, ''''////ddddeeeevvvv////ttttttttyyyy''''))));;;;
  877.                    <<<<TTTTTTTTYYYY>>>> ====~~~~ ////^^^^yyyy////iiii &&&&&&&& ffffoooooooo(((())));;;;    #### ddddoooo ffffoooooooo iiiiffff ddddeeeessssiiiirrrreeeedddd
  878.  
  879.                    iiiiffff ((((////VVVVeeeerrrrssssiiiioooonnnn:::: ****(((([[[[0000----9999....]]]]****))))////)))) {{{{ $$$$vvvveeeerrrrssssiiiioooonnnn ==== $$$$1111;;;; }}}}
  880.  
  881.                    nnnneeeexxxxtttt iiiiffff mmmm####^^^^////uuuussssrrrr////ssssppppoooooooollll////uuuuuuuuccccpppp####;;;;
  882.  
  883.                    #### ppppoooooooorrrr mmmmaaaannnn''''ssss ggggrrrreeeepppp
  884.                    $$$$aaaarrrrgggg ==== sssshhhhiiiifffftttt;;;;
  885.                    wwwwhhhhiiiilllleeee ((((<<<<>>>>)))) {{{{
  886.                        pppprrrriiiinnnntttt iiiiffff ////$$$$aaaarrrrgggg////oooo;;;;       #### ccccoooommmmppppiiiilllleeee oooonnnnllllyyyy oooonnnncccceeee
  887.                    }}}}
  888.  
  889.                    iiiiffff (((((((($$$$FFFF1111,,,, $$$$FFFF2222,,,, $$$$EEEEttttcccc)))) ==== (((($$$$ffffoooooooo ====~~~~ ////^^^^((((\\\\SSSS++++))))\\\\ssss++++((((\\\\SSSS++++))))\\\\ssss****((((....****))))////))))))))
  890.  
  891.                This last example splits $$$$ffffoooooooo into the first two
  892.                words and the remainder of the line, and assigns
  893.                those three fields to $$$$FFFF1111, $$$$FFFF2222 and $$$$EEEEttttcccc.  The
  894.                conditional is true if any variables were
  895.                assigned, i.e. if the pattern matched.
  896.  
  897.                The ////gggg modifier specifies global pattern
  898.                matching--that is, matching as many times as
  899.                possible within the string.  How it behaves
  900.                depends on the context.  In a list context, it
  901.                returns a list of all the substrings matched by
  902.                all the parentheses in the regular expression.  If
  903.                there are no parentheses, it returns a list of all
  904.                the matched strings, as if there were parentheses
  905.                around the whole pattern.
  906.  
  907.                In a scalar context, mmmm////////gggg iterates through the
  908.                string, returning TRUE each time it matches, and
  909.                FALSE when it eventually runs out of matches.  (In
  910.                other words, it remembers where it left off last
  911.                time and restarts the search at that point.  You
  912.                can actually find the current match position of a
  913.                string using the _p_o_s_(_) function--see the _p_e_r_l_f_u_n_c
  914.                manpage.)  If you modify the string in any way,
  915.                the match position is reset to the beginning.
  916.                Examples:
  917.  
  918.  
  919.  
  920.  
  921.  
  922. 13/Feb/96                perl 5.002 with                       14
  923.  
  924.  
  925.  
  926.  
  927.  
  928. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  929.  
  930.  
  931.                    #### lllliiiisssstttt ccccoooonnnntttteeeexxxxtttt
  932.                    (((($$$$oooonnnneeee,,,,$$$$ffffiiiivvvveeee,,,,$$$$ffffiiiifffftttteeeeeeeennnn)))) ==== ((((````uuuuppppttttiiiimmmmeeee```` ====~~~~ ////((((\\\\dddd++++\\\\....\\\\dddd++++))))////gggg))));;;;
  933.  
  934.                    #### ssssccccaaaallllaaaarrrr ccccoooonnnntttteeeexxxxtttt
  935.                    $$$$//// ==== """""""";;;; $$$$**** ==== 1111;;;;  #### $$$$**** ddddeeeepppprrrreeeeccccaaaatttteeeedddd iiiinnnn PPPPeeeerrrrllll 5555
  936.                    wwwwhhhhiiiilllleeee (((($$$$ppppaaaarrrraaaaggggrrrraaaapppphhhh ==== <<<<>>>>)))) {{{{
  937.                        wwwwhhhhiiiilllleeee (((($$$$ppppaaaarrrraaaaggggrrrraaaapppphhhh ====~~~~ ////[[[[aaaa----zzzz]]]][[[[''''""""))))]]]]****[[[[....!!!!????]]]]++++[[[[''''""""))))]]]]****\\\\ssss////gggg)))) {{{{
  938.                            $$$$sssseeeennnntttteeeennnncccceeeessss++++++++;;;;
  939.                        }}}}
  940.                    }}}}
  941.                    pppprrrriiiinnnntttt """"$$$$sssseeeennnntttteeeennnncccceeeessss\\\\nnnn"""";;;;
  942.  
  943.  
  944.        q/STRING/
  945.  
  946.        ''''SSSSTTTTRRRRIIIINNNNGGGG''''
  947.                A single-quoted, literal string.  Backslashes are
  948.                ignored, unless followed by the delimiter or
  949.                another backslash, in which case the delimiter or
  950.                backslash is interpolated.
  951.  
  952.                    $$$$ffffoooooooo ==== qqqq!!!!IIII ssssaaaaiiiidddd,,,, """"YYYYoooouuuu ssssaaaaiiiidddd,,,, ''''SSSShhhheeee ssssaaaaiiiidddd iiiitttt....''''""""!!!!;;;;
  953.                    $$$$bbbbaaaarrrr ==== qqqq((((''''TTTThhhhiiiissss iiiissss iiiitttt....''''))));;;;
  954.  
  955.  
  956.        qq/STRING/
  957.  
  958.        "STRING"
  959.                A double-quoted, interpolated string.
  960.  
  961.                    $$$$____ ....==== qqqqqqqq
  962.                     ((((************ TTTThhhheeee pppprrrreeeevvvviiiioooouuuussss lllliiiinnnneeee ccccoooonnnnttttaaaaiiiinnnnssss tttthhhheeee nnnnaaaauuuugggghhhhttttyyyy wwwwoooorrrrdddd """"$$$$1111""""....\\\\nnnn))))
  963.                                iiiiffff ////((((ttttccccllll||||rrrreeeexxxxxxxx||||ppppyyyytttthhhhoooonnnn))))////;;;;      #### ::::----))))
  964.  
  965.  
  966.        qx/STRING/
  967.  
  968.        `STRING`
  969.                A string which is interpolated and then executed
  970.                as a system command.  The collected standard
  971.                output of the command is returned.  In scalar
  972.                context, it comes back as a single (potentially
  973.                multi-line) string.  In list context, returns a
  974.                list of lines (however you've defined lines with
  975.                $/ or $$$$IIIINNNNPPPPUUUUTTTT____RRRREEEECCCCOOOORRRRDDDD____SSSSEEEEPPPPAAAARRRRAAAATTTTOOOORRRR).
  976.  
  977.                    $$$$ttttooooddddaaaayyyy ==== qqqqxxxx{{{{ ddddaaaatttteeee }}}};;;;
  978.  
  979.                See the section on _I_/_O _O_p_e_r_a_t_o_r_s for more
  980.                discussion.
  981.  
  982.        qw/STRING/
  983.                Returns a list of the words extracted out of
  984.                STRING, using embedded whitespace as the word
  985.  
  986.  
  987.  
  988. 13/Feb/96                perl 5.002 with                       15
  989.  
  990.  
  991.  
  992.  
  993.  
  994. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  995.  
  996.  
  997.                delimiters.  It is exactly equivalent to
  998.  
  999.                    sssspppplllliiiitttt(((('''' '''',,,, qqqq////SSSSTTTTRRRRIIIINNNNGGGG////))));;;;
  1000.  
  1001.                Some frequently seen examples:
  1002.  
  1003.                    uuuusssseeee PPPPOOOOSSSSIIIIXXXX qqqqwwww(((( sssseeeettttllllooooccccaaaalllleeee llllooooccccaaaalllleeeeccccoooonnnnvvvv ))))
  1004.                    @@@@EEEEXXXXPPPPOOOORRRRTTTT ==== qqqqwwww(((( ffffoooooooo bbbbaaaarrrr bbbbaaaazzzz ))));;;;
  1005.  
  1006.  
  1007.        s/PATTERN/REPLACEMENT/egimosx
  1008.                Searches a string for a pattern, and if found,
  1009.                replaces that pattern with the replacement text
  1010.                and returns the number of substitutions made.
  1011.                Otherwise it returns false (0).
  1012.  
  1013.                If no string is specified via the ====~~~~ or !!!!~~~~
  1014.                operator, the $$$$____ variable is searched and
  1015.                modified.  (The string specified with ====~~~~ must be a
  1016.                scalar variable, an array element, a hash element,
  1017.                or an assignment to one of those, i.e. an lvalue.)
  1018.  
  1019.                If the delimiter chosen is single quote, no
  1020.                variable interpolation is done on either the
  1021.                PATTERN or the REPLACEMENT.  Otherwise, if the
  1022.                PATTERN contains a $ that looks like a variable
  1023.                rather than an end-of-string test, the variable
  1024.                will be interpolated into the pattern at run-time.
  1025.                If you only want the pattern compiled once the
  1026.                first time the variable is interpolated, use the
  1027.                ////oooo option.  If the pattern evaluates to a null
  1028.                string, the last successfully executed regular
  1029.                expression is used instead.  See the _p_e_r_l_r_e
  1030.                manpage for further explanation on these.
  1031.  
  1032.                Options are:
  1033.  
  1034.                    eeee   EEEEvvvvaaaalllluuuuaaaatttteeee tttthhhheeee rrrriiiigggghhhhtttt ssssiiiiddddeeee aaaassss aaaannnn eeeexxxxpppprrrreeeessssssssiiiioooonnnn....
  1035.                    gggg   RRRReeeeppppllllaaaacccceeee gggglllloooobbbbaaaallllllllyyyy,,,, iiii....eeee.... aaaallllllll ooooccccccccuuuurrrrrrrreeeennnncccceeeessss....
  1036.                    iiii   DDDDoooo ccccaaaasssseeee----iiiinnnnsssseeeennnnssssiiiittttiiiivvvveeee ppppaaaatttttttteeeerrrrnnnn mmmmaaaattttcccchhhhiiiinnnngggg....
  1037.                    mmmm   TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss mmmmuuuullllttttiiiipppplllleeee lllliiiinnnneeeessss....
  1038.                    oooo   OOOOnnnnllllyyyy ccccoooommmmppppiiiilllleeee ppppaaaatttttttteeeerrrrnnnn oooonnnncccceeee....
  1039.                    ssss   TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss ssssiiiinnnngggglllleeee lllliiiinnnneeee....
  1040.                    xxxx   UUUUsssseeee eeeexxxxtttteeeennnnddddeeeedddd rrrreeeegggguuuullllaaaarrrr eeeexxxxpppprrrreeeessssssssiiiioooonnnnssss....
  1041.  
  1042.                Any non-alphanumeric, non-whitespace delimiter may
  1043.                replace the slashes.  If single quotes are used,
  1044.                no interpretation is done on the replacement
  1045.                string (the ////eeee modifier overrides this, however).
  1046.                If backquotes are used, the replacement string is
  1047.                a command to execute whose output will be used as
  1048.                the actual replacement text.  If the PATTERN is
  1049.                delimited by bracketing quotes, the REPLACEMENT
  1050.                has its own pair of quotes, which may or may not
  1051.  
  1052.  
  1053.  
  1054. 13/Feb/96                perl 5.002 with                       16
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  1061.  
  1062.  
  1063.                be bracketing quotes, e.g.  ssss((((ffffoooooooo))))((((bbbbaaaarrrr)))) or
  1064.                ssss<<<<ffffoooooooo>>>>////bbbbaaaarrrr////.  A ////eeee will cause the replacement
  1065.                portion to be interpreter as a full-fledged Perl
  1066.                expression and _e_v_a_l_(_)ed right then and there.  It
  1067.                is, however, syntax checked at compile-time.
  1068.  
  1069.                Examples:
  1070.  
  1071.                    ssss////\\\\bbbbggggrrrreeeeeeeennnn\\\\bbbb////mmmmaaaauuuuvvvveeee////gggg;;;;                #### ddddoooonnnn''''tttt cccchhhhaaaannnnggggeeee wwwwiiiinnnntttteeeerrrrggggrrrreeeeeeeennnn
  1072.  
  1073.                    $$$$ppppaaaatttthhhh ====~~~~ ssss||||////uuuussssrrrr////bbbbiiiinnnn||||////uuuussssrrrr////llllooooccccaaaallll////bbbbiiiinnnn||||;;;;
  1074.  
  1075.                    ssss////LLLLooooggggiiiinnnn:::: $$$$ffffoooooooo////LLLLooooggggiiiinnnn:::: $$$$bbbbaaaarrrr////;;;; #### rrrruuuunnnn----ttttiiiimmmmeeee ppppaaaatttttttteeeerrrrnnnn
  1076.  
  1077.                    (((($$$$ffffoooooooo ==== $$$$bbbbaaaarrrr)))) ====~~~~ ssss////tttthhhhiiiissss////tttthhhhaaaatttt////;;;;
  1078.  
  1079.                    $$$$ccccoooouuuunnnntttt ==== (((($$$$ppppaaaarrrraaaaggggrrrraaaapppphhhh ====~~~~ ssss////MMMMiiiisssstttteeeerrrr\\\\bbbb////MMMMrrrr....////gggg))));;;;
  1080.  
  1081.                    $$$$____ ==== ''''aaaabbbbcccc111122223333xxxxyyyyzzzz'''';;;;
  1082.                    ssss////\\\\dddd++++////$$$$&&&&****2222////eeee;;;;               #### yyyyiiiieeeellllddddssss ''''aaaabbbbcccc222244446666xxxxyyyyzzzz''''
  1083.                    ssss////\\\\dddd++++////sssspppprrrriiiinnnnttttffff((((""""%%%%5555dddd"""",,,,$$$$&&&&))))////eeee;;;;  #### yyyyiiiieeeellllddddssss ''''aaaabbbbcccc  222244446666xxxxyyyyzzzz''''
  1084.                    ssss////\\\\wwww////$$$$&&&& xxxx 2222////eeeegggg;;;;             #### yyyyiiiieeeellllddddssss ''''aaaaaaaabbbbbbbbcccccccc  222222224444444466666666xxxxxxxxyyyyyyyyzzzzzzzz''''
  1085.  
  1086.                    ssss////%%%%((((....))))////$$$$ppppeeeerrrrcccceeeennnntttt{{{{$$$$1111}}}}////gggg;;;;      #### cccchhhhaaaannnnggggeeee ppppeeeerrrrcccceeeennnntttt eeeessssccccaaaappppeeeessss;;;; nnnnoooo ////eeee
  1087.                    ssss////%%%%((((....))))////$$$$ppppeeeerrrrcccceeeennnntttt{{{{$$$$1111}}}} |||||||| $$$$&&&&////ggggeeee;;;;       #### eeeexxxxpppprrrr nnnnoooowwww,,,, ssssoooo ////eeee
  1088.                    ssss////^^^^====((((\\\\wwww++++))))////&&&&ppppoooodddd(((($$$$1111))))////ggggeeee;;;;      #### uuuusssseeee ffffuuuunnnnccccttttiiiioooonnnn ccccaaaallllllll
  1089.  
  1090.                    #### ////eeee''''ssss ccccaaaannnn eeeevvvveeeennnn nnnneeeesssstttt;;;;  tttthhhhiiiissss wwwwiiiillllllll eeeexxxxppppaaaannnndddd
  1091.                    #### ssssiiiimmmmpppplllleeee eeeemmmmbbbbeeeeddddddddeeeedddd vvvvaaaarrrriiiiaaaabbbblllleeeessss iiiinnnn $$$$____
  1092.                    ssss////((((\\\\$$$$\\\\wwww++++))))////$$$$1111////eeeeeeeegggg;;;;
  1093.  
  1094.                    #### DDDDeeeelllleeeetttteeee CCCC ccccoooommmmmmmmeeeennnnttttssss....
  1095.                    $$$$pppprrrrooooggggrrrraaaammmm ====~~~~ ssss {{{{
  1096.                        ////\\\\****     #### MMMMaaaattttcccchhhh tttthhhheeee ooooppppeeeennnniiiinnnngggg ddddeeeelllliiiimmmmiiiitttteeeerrrr....
  1097.                        ....****????     #### MMMMaaaattttcccchhhh aaaa mmmmiiiinnnniiiimmmmaaaallll nnnnuuuummmmbbbbeeeerrrr ooooffff cccchhhhaaaarrrraaaacccctttteeeerrrrssss....
  1098.                        \\\\****////     #### MMMMaaaattttcccchhhh tttthhhheeee cccclllloooossssiiiinnnngggg ddddeeeelllliiiimmmmiiiitttteeeerrrr....
  1099.                    }}}} [[[[]]]]ggggssssxxxx;;;;
  1100.  
  1101.                    ssss////^^^^\\\\ssss****((((....****????))))\\\\ssss****$$$$////$$$$1111////;;;;        #### ttttrrrriiiimmmm wwwwhhhhiiiitttteeee ssssppppaaaacccceeee
  1102.  
  1103.                    ssss////(((([[[[^^^^ ]]]]****)))) ****(((([[[[^^^^ ]]]]****))))////$$$$2222 $$$$1111////;;;;  #### rrrreeeevvvveeeerrrrsssseeee 1111sssstttt ttttwwwwoooo ffffiiiieeeellllddddssss
  1104.  
  1105.                Note the use of $ instead of \ in the last
  1106.                example.  Unlike sssseeeedddd, we only use the \<_d_i_g_i_t>
  1107.                form in the left hand side.  Anywhere else it's
  1108.                $<_d_i_g_i_t>.
  1109.  
  1110.                Occasionally, you can't just use a ////gggg to get all
  1111.                the changes to occur.  Here are two common cases:
  1112.  
  1113.                    #### ppppuuuutttt ccccoooommmmmmmmaaaassss iiiinnnn tttthhhheeee rrrriiiigggghhhhtttt ppppllllaaaacccceeeessss iiiinnnn aaaannnn iiiinnnntttteeeeggggeeeerrrr
  1114.                    1111 wwwwhhhhiiiilllleeee ssss////((((....****\\\\dddd))))((((\\\\dddd\\\\dddd\\\\dddd))))////$$$$1111,,,,$$$$2222////gggg;;;;      #### ppppeeeerrrrllll4444
  1115.                    1111 wwwwhhhhiiiilllleeee ssss////((((\\\\dddd))))((((\\\\dddd\\\\dddd\\\\dddd))))((((????!!!!\\\\dddd))))////$$$$1111,,,,$$$$2222////gggg;;;;  #### ppppeeeerrrrllll5555
  1116.  
  1117.  
  1118.  
  1119.  
  1120. 13/Feb/96                perl 5.002 with                       17
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  1127.  
  1128.  
  1129.                    #### eeeexxxxppppaaaannnndddd ttttaaaabbbbssss ttttoooo 8888----ccccoooolllluuuummmmnnnn ssssppppaaaacccciiiinnnngggg
  1130.                    1111 wwwwhhhhiiiilllleeee ssss////\\\\tttt++++////'''' '''' xxxx ((((lllleeeennnnggggtttthhhh(((($$$$&&&&))))****8888 ---- lllleeeennnnggggtttthhhh(((($$$$````))))%%%%8888))))////eeee;;;;
  1131.  
  1132.  
  1133.        tr/SEARCHLIST/REPLACEMENTLIST/cds
  1134.  
  1135.        y/SEARCHLIST/REPLACEMENTLIST/cds
  1136.                Translates all occurrences of the characters found
  1137.                in the search list with the corresponding
  1138.                character in the replacement list.  It returns the
  1139.                number of characters replaced or deleted.  If no
  1140.                string is specified via the =~ or !~ operator, the
  1141.                $$$$____ string is translated.  (The string specified
  1142.                with =~ must be a scalar variable, an array
  1143.                element, or an assignment to one of those, i.e. an
  1144.                lvalue.)  For sssseeeedddd devotees, yyyy is provided as a
  1145.                synonym for ttttrrrr.  If the SEARCHLIST is delimited by
  1146.                bracketing quotes, the REPLACEMENTLIST has its own
  1147.                pair of quotes, which may or may not be bracketing
  1148.                quotes, e.g. ttttrrrr[[[[AAAA----ZZZZ]]]][[[[aaaa----zzzz]]]] or ttttrrrr((((++++----****////))))////AAAABBBBCCCCDDDD////.
  1149.  
  1150.                Options:
  1151.  
  1152.                    cccc   CCCCoooommmmpppplllleeeemmmmeeeennnntttt tttthhhheeee SSSSEEEEAAAARRRRCCCCHHHHLLLLIIIISSSSTTTT....
  1153.                    dddd   DDDDeeeelllleeeetttteeee ffffoooouuuunnnndddd bbbbuuuutttt uuuunnnnrrrreeeeppppllllaaaacccceeeedddd cccchhhhaaaarrrraaaacccctttteeeerrrrssss....
  1154.                    ssss   SSSSqqqquuuuaaaasssshhhh dddduuuupppplllliiiiccccaaaatttteeee rrrreeeeppppllllaaaacccceeeedddd cccchhhhaaaarrrraaaacccctttteeeerrrrssss....
  1155.  
  1156.                If the ////cccc modifier is specified, the SEARCHLIST
  1157.                character set is complemented.  If the ////dddd modifier
  1158.                is specified, any characters specified by
  1159.                SEARCHLIST not found in REPLACEMENTLIST are
  1160.                deleted.  (Note that this is slightly more
  1161.                flexible than the behavior of some ttttrrrr programs,
  1162.                which delete anything they find in the SEARCHLIST,
  1163.                period.)  If the ////ssss modifier is specified,
  1164.                sequences of characters that were translated to
  1165.                the same character are squashed down to a single
  1166.                instance of the character.
  1167.  
  1168.                If the ////dddd modifier is used, the REPLACEMENTLIST is
  1169.                always interpreted exactly as specified.
  1170.                Otherwise, if the REPLACEMENTLIST is shorter than
  1171.                the SEARCHLIST, the final character is replicated
  1172.                till it is long enough.  If the REPLACEMENTLIST is
  1173.                null, the SEARCHLIST is replicated.  This latter
  1174.                is useful for counting characters in a class or
  1175.                for squashing character sequences in a class.
  1176.  
  1177.                Examples:
  1178.  
  1179.                    $$$$AAAARRRRGGGGVVVV[[[[1111]]]] ====~~~~ ttttrrrr////AAAA----ZZZZ////aaaa----zzzz////;;;;    #### ccccaaaannnnoooonnnniiiiccccaaaalllliiiizzzzeeee ttttoooo lllloooowwwweeeerrrr ccccaaaasssseeee
  1180.  
  1181.                    $$$$ccccnnnntttt ==== ttttrrrr////****////****////;;;;             #### ccccoooouuuunnnntttt tttthhhheeee ssssttttaaaarrrrssss iiiinnnn $$$$____
  1182.  
  1183.  
  1184.  
  1185.  
  1186. 13/Feb/96                perl 5.002 with                       18
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  1193.  
  1194.  
  1195.                    $$$$ccccnnnntttt ==== $$$$sssskkkkyyyy ====~~~~ ttttrrrr////****////****////;;;;     #### ccccoooouuuunnnntttt tttthhhheeee ssssttttaaaarrrrssss iiiinnnn $$$$sssskkkkyyyy
  1196.  
  1197.                    $$$$ccccnnnntttt ==== ttttrrrr////0000----9999////////;;;;            #### ccccoooouuuunnnntttt tttthhhheeee ddddiiiiggggiiiittttssss iiiinnnn $$$$____
  1198.  
  1199.                    ttttrrrr////aaaa----zzzzAAAA----ZZZZ////////ssss;;;;               #### bbbbooooooookkkkkkkkeeeeeeeeppppeeeerrrr ---->>>> bbbbooookkkkeeeeppppeeeerrrr
  1200.  
  1201.                    (((($$$$HHHHOOOOSSSSTTTT ==== $$$$hhhhoooosssstttt)))) ====~~~~ ttttrrrr////aaaa----zzzz////AAAA----ZZZZ////;;;;
  1202.  
  1203.                    ttttrrrr////aaaa----zzzzAAAA----ZZZZ//// ////ccccssss;;;;             #### cccchhhhaaaannnnggggeeee nnnnoooonnnn----aaaallllpppphhhhaaaassss ttttoooo ssssiiiinnnngggglllleeee ssssppppaaaacccceeee
  1204.  
  1205.                    ttttrrrr [[[[\\\\222200000000----\\\\333377777777]]]]
  1206.                       [[[[\\\\000000000000----\\\\111177777777]]]];;;;             #### ddddeeeelllleeeetttteeee 8888tttthhhh bbbbiiiitttt
  1207.  
  1208.                If multiple translations are given for a
  1209.                character, only the first one is used:
  1210.  
  1211.                    ttttrrrr////AAAAAAAAAAAA////XXXXYYYYZZZZ////
  1212.  
  1213.                will translate any A to X.
  1214.  
  1215.                Note that because the translation table is built
  1216.                at compile time, neither the SEARCHLIST nor the
  1217.                REPLACEMENTLIST are subjected to double quote
  1218.                interpolation.  That means that if you want to use
  1219.                variables, you must use an _e_v_a_l_(_):
  1220.  
  1221.                    eeeevvvvaaaallll """"ttttrrrr////$$$$oooollllddddlllliiiisssstttt////$$$$nnnneeeewwwwlllliiiisssstttt////"""";;;;
  1222.                    ddddiiiieeee $$$$@@@@ iiiiffff $$$$@@@@;;;;
  1223.  
  1224.                    eeeevvvvaaaallll """"ttttrrrr////$$$$oooollllddddlllliiiisssstttt////$$$$nnnneeeewwwwlllliiiisssstttt////,,,, 1111"""" oooorrrr ddddiiiieeee $$$$@@@@;;;;
  1225.  
  1226.  
  1227.        IIII////OOOO OOOOppppeeeerrrraaaattttoooorrrrssss
  1228.  
  1229.        There are several I/O operators you should know about.  A
  1230.        string is enclosed by backticks (grave accents) first
  1231.        undergoes variable substitution just like a double quoted
  1232.        string.  It is then interpreted as a command, and the
  1233.        output of that command is the value of the pseudo-literal,
  1234.        like in a shell.  In a scalar context, a single string
  1235.        consisting of all the output is returned.  In a list
  1236.        context, a list of values is returned, one for each line
  1237.        of output.  (You can set $$$$//// to use a different line
  1238.        terminator.)  The command is executed each time the
  1239.        pseudo-literal is evaluated.  The status value of the
  1240.        command is returned in $$$$???? (see the _p_e_r_l_v_a_r manpage for the
  1241.        interpretation of $$$$????).  Unlike in ccccsssshhhh, no translation is
  1242.        done on the return data--newlines remain newlines.  Unlike
  1243.        in any of the shells, single quotes do not hide variable
  1244.        names in the command from interpretation.  To pass a $
  1245.        through to the shell you need to hide it with a backslash.
  1246.        The generalized form of backticks is qqqqxxxx////////.  (Because
  1247.        backticks always undergo shell expansion as well, see the
  1248.        _p_e_r_l_s_e_c manpage for security concerns.)
  1249.  
  1250.  
  1251.  
  1252. 13/Feb/96                perl 5.002 with                       19
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  1259.  
  1260.  
  1261.        Evaluating a filehandle in angle brackets yields the next
  1262.        line from that file (newline included, so it's never false
  1263.        until end of file, at which time an undefined value is
  1264.        returned).  Ordinarily you must assign that value to a
  1265.        variable, but there is one situation where an automatic
  1266.        assignment happens.  _I_f _a_n_d _O_N_L_Y _i_f the input symbol is
  1267.        the only thing inside the conditional of a wwwwhhhhiiiilllleeee loop, the
  1268.        value is automatically assigned to the variable $$$$____.  The
  1269.        assigned value is then tested to see if it is defined.
  1270.        (This may seem like an odd thing to you, but you'll use
  1271.        the construct in almost every Perl script you write.)
  1272.        Anyway, the following lines are equivalent to each other:
  1273.  
  1274.            wwwwhhhhiiiilllleeee ((((ddddeeeeffffiiiinnnneeeedddd(((($$$$____ ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>)))))))) {{{{ pppprrrriiiinnnntttt;;;; }}}}
  1275.            wwwwhhhhiiiilllleeee ((((<<<<SSSSTTTTDDDDIIIINNNN>>>>)))) {{{{ pppprrrriiiinnnntttt;;;; }}}}
  1276.            ffffoooorrrr ((((;;;;<<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;)))) {{{{ pppprrrriiiinnnntttt;;;; }}}}
  1277.            pppprrrriiiinnnntttt wwwwhhhhiiiilllleeee ddddeeeeffffiiiinnnneeeedddd(((($$$$____ ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>))));;;;
  1278.            pppprrrriiiinnnntttt wwwwhhhhiiiilllleeee <<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;
  1279.  
  1280.        The filehandles STDIN, STDOUT and STDERR are predefined.
  1281.        (The filehandles ssssttttddddiiiinnnn, ssssttttddddoooouuuutttt and ssssttttddddeeeerrrrrrrr will also work
  1282.        except in packages, where they would be interpreted as
  1283.        local identifiers rather than global.)  Additional
  1284.        filehandles may be created with the _o_p_e_n_(_) function.  See
  1285.        the ooooppppeeeennnn(((()))) entry in the _p_e_r_l_f_u_n_c manpage for details on
  1286.        this.
  1287.  
  1288.        If a <FILEHANDLE> is used in a context that is looking for
  1289.        a list, a list consisting of all the input lines is
  1290.        returned, one line per list element.  It's easy to make a
  1291.        _L_A_R_G_E data space this way, so use with care.
  1292.  
  1293.        The null filehandle <> is special and can be used to
  1294.        emulate the behavior of sssseeeedddd and aaaawwwwkkkk.  Input from <> comes
  1295.        either from standard input, or from each file listed on
  1296.        the command line.  Here's how it works: the first time <>
  1297.        is evaluated, the @@@@AAAARRRRGGGGVVVV array is checked, and if it is
  1298.        null, $$$$AAAARRRRGGGGVVVV[[[[0000]]]] is set to "-", which when opened gives you
  1299.        standard input.  The @@@@AAAARRRRGGGGVVVV array is then processed as a
  1300.        list of filenames.  The loop
  1301.  
  1302.            wwwwhhhhiiiilllleeee ((((<<<<>>>>)))) {{{{
  1303.                ............                     #### ccccooooddddeeee ffffoooorrrr eeeeaaaacccchhhh lllliiiinnnneeee
  1304.            }}}}
  1305.  
  1306.        is equivalent to the following Perl-like pseudo code:
  1307.  
  1308.            uuuunnnnsssshhhhiiiifffftttt((((@@@@AAAARRRRGGGGVVVV,,,, ''''----'''')))) iiiiffff $$$$####AAAARRRRGGGGVVVV <<<< $$$$[[[[;;;;
  1309.            wwwwhhhhiiiilllleeee (((($$$$AAAARRRRGGGGVVVV ==== sssshhhhiiiifffftttt)))) {{{{
  1310.                ooooppppeeeennnn((((AAAARRRRGGGGVVVV,,,, $$$$AAAARRRRGGGGVVVV))));;;;
  1311.                wwwwhhhhiiiilllleeee ((((<<<<AAAARRRRGGGGVVVV>>>>)))) {{{{
  1312.                    ............         #### ccccooooddddeeee ffffoooorrrr eeeeaaaacccchhhh lllliiiinnnneeee
  1313.                }}}}
  1314.            }}}}
  1315.  
  1316.  
  1317.  
  1318. 13/Feb/96                perl 5.002 with                       20
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  1325.  
  1326.  
  1327.        except that it isn't so cumbersome to say, and will
  1328.        actually work.  It really does shift array @@@@AAAARRRRGGGGVVVV and put
  1329.        the current filename into variable $$$$AAAARRRRGGGGVVVV.  It also uses
  1330.        filehandle _A_R_G_V internally--<> is just a synonym for
  1331.        <ARGV>, which is magical.  (The pseudo code above doesn't
  1332.        work because it treats <ARGV> as non-magical.)
  1333.  
  1334.        You can modify @@@@AAAARRRRGGGGVVVV before the first <> as long as the
  1335.        array ends up containing the list of filenames you really
  1336.        want.  Line numbers ($$$$....)  continue as if the input were
  1337.        one big happy file.  (But see example under _e_o_f_(_) for how
  1338.        to reset line numbers on each file.)
  1339.  
  1340.        If you want to set @@@@AAAARRRRGGGGVVVV to your own list of files, go
  1341.        right ahead.  If you want to pass switches into your
  1342.        script, you can use one of the Getopts modules or put a
  1343.        loop on the front like this:
  1344.  
  1345.            wwwwhhhhiiiilllleeee (((($$$$____ ==== $$$$AAAARRRRGGGGVVVV[[[[0000]]]],,,, ////^^^^----////)))) {{{{
  1346.                sssshhhhiiiifffftttt;;;;
  1347.                llllaaaasssstttt iiiiffff ////^^^^--------$$$$////;;;;
  1348.                iiiiffff ((((////^^^^----DDDD((((....****))))////)))) {{{{ $$$$ddddeeeebbbbuuuugggg ==== $$$$1111 }}}}
  1349.                iiiiffff ((((////^^^^----vvvv////))))     {{{{ $$$$vvvveeeerrrrbbbboooosssseeee++++++++  }}}}
  1350.                ............             #### ooootttthhhheeeerrrr sssswwwwiiiittttcccchhhheeeessss
  1351.            }}}}
  1352.            wwwwhhhhiiiilllleeee ((((<<<<>>>>)))) {{{{
  1353.                ............             #### ccccooooddddeeee ffffoooorrrr eeeeaaaacccchhhh lllliiiinnnneeee
  1354.            }}}}
  1355.  
  1356.        The <> symbol will return FALSE only once.  If you call it
  1357.        again after this it will assume you are processing another
  1358.        @@@@AAAARRRRGGGGVVVV list, and if you haven't set @@@@AAAARRRRGGGGVVVV, will input from
  1359.        STDIN.
  1360.  
  1361.        If the string inside the angle brackets is a reference to
  1362.        a scalar variable (e.g. <$foo>), then that variable
  1363.        contains the name of the filehandle to input from, or a
  1364.        reference to the same.  For example:
  1365.  
  1366.            $$$$ffffhhhh ==== \\\\****SSSSTTTTDDDDIIIINNNN;;;;
  1367.            $$$$lllliiiinnnneeee ==== <<<<$$$$ffffhhhh>>>>;;;;
  1368.  
  1369.        If the string inside angle brackets is not a filehandle or
  1370.        a scalar variable containing a filehandle name or
  1371.        reference, then it is interpreted as a filename pattern to
  1372.        be globbed, and either a list of filenames or the next
  1373.        filename in the list is returned, depending on context.
  1374.        One level of $ interpretation is done first, but you can't
  1375.        say <<<<$$$$ffffoooooooo>>>> because that's an indirect filehandle as
  1376.        explained in the previous paragraph.  In older version of
  1377.        Perl, programmers would insert curly brackets to force
  1378.        interpretation as a filename glob: <<<<$$$${{{{ffffoooooooo}}}}>>>>.  These days,
  1379.        it's consdired cleaner to call the internal function
  1380.        directly as gggglllloooobbbb(((($$$$ffffoooooooo)))), which is probably the right way to
  1381.  
  1382.  
  1383.  
  1384. 13/Feb/96                perl 5.002 with                       21
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  1391.  
  1392.  
  1393.        have done it in the first place.)  Example:
  1394.  
  1395.            wwwwhhhhiiiilllleeee ((((<<<<****....cccc>>>>)))) {{{{
  1396.                cccchhhhmmmmoooodddd 0000666644444444,,,, $$$$____;;;;
  1397.            }}}}
  1398.  
  1399.        is equivalent to
  1400.  
  1401.            ooooppppeeeennnn((((FFFFOOOOOOOO,,,, """"eeeecccchhhhoooo ****....cccc |||| ttttrrrr ----ssss '''' \\\\tttt\\\\rrrr\\\\ffff'''' ''''\\\\\\\\000011112222\\\\\\\\000011112222\\\\\\\\000011112222\\\\\\\\000011112222''''||||""""))));;;;
  1402.            wwwwhhhhiiiilllleeee ((((<<<<FFFFOOOOOOOO>>>>)))) {{{{
  1403.                cccchhhhoooopppp;;;;
  1404.                cccchhhhmmmmoooodddd 0000666644444444,,,, $$$$____;;;;
  1405.            }}}}
  1406.  
  1407.        In fact, it's currently implemented that way.  (Which
  1408.        means it will not work on filenames with spaces in them
  1409.        unless you have _c_s_h(1) on your machine.)  Of course, the
  1410.        shortest way to do the above is:
  1411.  
  1412.            cccchhhhmmmmoooodddd 0000666644444444,,,, <<<<****....cccc>>>>;;;;
  1413.  
  1414.        Because globbing invokes a shell, it's often faster to
  1415.        call _r_e_a_d_d_i_r_(_) yourself and just do your own _g_r_e_p_(_) on the
  1416.        filenames.  Furthermore, due to its current implementation
  1417.        of using a shell, the _g_l_o_b_(_) routine may get "Arg list too
  1418.        long" errors (unless you've installed _t_c_s_h(1L) as
  1419.        _/_b_i_n_/_c_s_h).
  1420.  
  1421.        A glob only evaluates its (embedded) argument when it is
  1422.        starting a new list.  All values must be read before it
  1423.        will start over.  In a list context this isn't important,
  1424.        because you automatically get them all anyway.  In a
  1425.        scalar context, however, the operator returns the next
  1426.        value each time it is called, or a FALSE value if you've
  1427.        just run out.  Again, FALSE is returned only once.  So if
  1428.        you're expecting a single value from a glob, it is much
  1429.        better to say
  1430.  
  1431.            (((($$$$ffffiiiilllleeee)))) ==== <<<<bbbblllluuuurrrrcccchhhh****>>>>;;;;
  1432.  
  1433.        than
  1434.  
  1435.            $$$$ffffiiiilllleeee ==== <<<<bbbblllluuuurrrrcccchhhh****>>>>;;;;
  1436.  
  1437.        because the latter will alternate between returning a
  1438.        filename and returning FALSE.
  1439.  
  1440.        It you're trying to do variable interpolation, it's
  1441.        definitely better to use the _g_l_o_b_(_) function, because the
  1442.        older notation can cause people to become confused with
  1443.        the indirect filehandle notatin.
  1444.  
  1445.            @@@@ffffiiiilllleeeessss ==== gggglllloooobbbb((((""""$$$$ddddiiiirrrr////****....[[[[cccchhhh]]]]""""))));;;;
  1446.            @@@@ffffiiiilllleeeessss ==== gggglllloooobbbb(((($$$$ffffiiiilllleeeessss[[[[$$$$iiii]]]]))));;;;
  1447.  
  1448.  
  1449.  
  1450. 13/Feb/96                perl 5.002 with                       22
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456. PERLOP(1)      User Contributed Perl Documentation      PERLOP(1)
  1457.  
  1458.  
  1459.        CCCCoooonnnnssssttttaaaannnntttt FFFFoooollllddddiiiinnnngggg
  1460.  
  1461.        Like C, Perl does a certain amount of expression
  1462.        evaluation at compile time, whenever it determines that
  1463.        all of the arguments to an operator are static and have no
  1464.        side effects.  In particular, string concatenation happens
  1465.        at compile time between literals that don't do variable
  1466.        substitution.  Backslash interpretation also happens at
  1467.        compile time.  You can say
  1468.  
  1469.            ''''NNNNoooowwww iiiissss tttthhhheeee ttttiiiimmmmeeee ffffoooorrrr aaaallllllll'''' .... """"\\\\nnnn"""" ....
  1470.                ''''ggggoooooooodddd mmmmeeeennnn ttttoooo ccccoooommmmeeee ttttoooo....''''
  1471.  
  1472.        and this all reduces to one string internally.  Likewise,
  1473.        if you say
  1474.  
  1475.            ffffoooorrrreeeeaaaacccchhhh $$$$ffffiiiilllleeee ((((@@@@ffffiiiilllleeeennnnaaaammmmeeeessss)))) {{{{
  1476.                iiiiffff ((((----ssss $$$$ffffiiiilllleeee >>>> 5555 ++++ 111100000000 **** 2222********11116666)))) {{{{ ............ }}}}
  1477.            }}}}
  1478.  
  1479.        the compiler will pre-compute the number that expression
  1480.        represents so that the interpreter won't have to.
  1481.  
  1482.        IIIInnnntttteeeeggggeeeerrrr aaaarrrriiiitttthhhhmmmmeeeettttiiiicccc
  1483.  
  1484.        By default Perl assumes that it must do most of its
  1485.        arithmetic in floating point.  But by saying
  1486.  
  1487.            uuuusssseeee iiiinnnntttteeeeggggeeeerrrr;;;;
  1488.  
  1489.        you may tell the compiler that it's okay to use integer
  1490.        operations from here to the end of the enclosing BLOCK.
  1491.        An inner BLOCK may countermand this by saying
  1492.  
  1493.            nnnnoooo iiiinnnntttteeeeggggeeeerrrr;;;;
  1494.  
  1495.        which lasts until the end of that BLOCK.
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516. 13/Feb/96                perl 5.002 with                       23
  1517.  
  1518.  
  1519.