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 / perlsub.0 < prev    next >
Text File  |  1996-03-02  |  70KB  |  1,123 lines

  1.  
  2.  
  3.  
  4. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  5.  
  6.  
  7. NNNNAAAAMMMMEEEE
  8.        perlsub - Perl subroutines
  9.  
  10. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  11.        To declare subroutines:
  12.  
  13.            ssssuuuubbbb NNNNAAAAMMMMEEEE;;;;             #### AAAA """"ffffoooorrrrwwwwaaaarrrrdddd"""" ddddeeeeccccllllaaaarrrraaaattttiiiioooonnnn....
  14.            ssssuuuubbbb NNNNAAAAMMMMEEEE((((PPPPRRRROOOOTTTTOOOO))));;;;      ####  ddddiiiittttttttoooo,,,, bbbbuuuutttt wwwwiiiitttthhhh pppprrrroooottttoooottttyyyyppppeeeessss
  15.  
  16.            ssssuuuubbbb NNNNAAAAMMMMEEEE BBBBLLLLOOOOCCCCKKKK        #### AAAA ddddeeeeccccllllaaaarrrraaaattttiiiioooonnnn aaaannnndddd aaaa ddddeeeeffffiiiinnnniiiittttiiiioooonnnn....
  17.            ssssuuuubbbb NNNNAAAAMMMMEEEE((((PPPPRRRROOOOTTTTOOOO)))) BBBBLLLLOOOOCCCCKKKK ####  ddddiiiittttttttoooo,,,, bbbbuuuutttt wwwwiiiitttthhhh pppprrrroooottttoooottttyyyyppppeeeessss
  18.  
  19.        To define an anonymous subroutine at runtime:
  20.  
  21.            $$$$ssssuuuubbbbrrrreeeeffff ==== ssssuuuubbbb BBBBLLLLOOOOCCCCKKKK;;;;
  22.  
  23.        To import subroutines:
  24.  
  25.            uuuusssseeee PPPPAAAACCCCKKKKAAAAGGGGEEEE qqqqwwww((((NNNNAAAAMMMMEEEE1111 NNNNAAAAMMMMEEEE2222 NNNNAAAAMMMMEEEE3333))));;;;
  26.  
  27.        To call subroutines:
  28.  
  29.            NNNNAAAAMMMMEEEE((((LLLLIIIISSSSTTTT))));;;;    #### &&&& iiiissss ooooppppttttiiiioooonnnnaaaallll wwwwiiiitttthhhh ppppaaaarrrreeeennnnssss....
  30.            NNNNAAAAMMMMEEEE LLLLIIIISSSSTTTT;;;;     #### PPPPaaaarrrreeeennnnssss ooooppppttttiiiioooonnnnaaaallll iiiiffff pppprrrreeeeddddeeeeccccllllaaaarrrreeeedddd////iiiimmmmppppoooorrrrtttteeeedddd....
  31.            &&&&NNNNAAAAMMMMEEEE;;;;         #### PPPPaaaasssssssseeeessss ccccuuuurrrrrrrreeeennnntttt @@@@____ ttttoooo ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee....
  32.  
  33.  
  34. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  35.        Like many languages, Perl provides for user-defined
  36.        subroutines.  These may be located anywhere in the main
  37.        program, loaded in from other files via the ddddoooo, rrrreeeeqqqquuuuiiiirrrreeee,
  38.        or uuuusssseeee keywords, or even generated on the fly using eeeevvvvaaaallll
  39.        or anonymous subroutines (closures).  You can even call a
  40.        function indirectly using a variable containing its name
  41.        or a CODE reference to it, as in $$$$vvvvaaaarrrr ==== \\\\&&&&ffffuuuunnnnccccttttiiiioooonnnn.
  42.  
  43.        The Perl model for function call and return values is
  44.        simple: all functions are passed as parameters one single
  45.        flat list of scalars, and all functions likewise return to
  46.        their caller one single flat list of scalars.  Any arrays
  47.        or hashes in these call and return lists will collapse,
  48.        losing their identities--but you may always use pass-by-
  49.        reference instead to avoid this.  Both call and return
  50.        lists may contain as many or as few scalar elements as
  51.        you'd like.  (Often a function without an explicit return
  52.        statement is called a subroutine, but there's really no
  53.        difference from the language's perspective.)
  54.  
  55.        Any arguments passed to the routine come in as the array
  56.        @@@@____.  Thus if you called a function with two arguments,
  57.        those would be stored in $$$$____[[[[0000]]]] and $$$$____[[[[1111]]]].  The array @@@@____ is
  58.        a local array, but its values are implicit references
  59.        (predating the _p_e_r_l_r_e_f manpage) to the actual scalar
  60.        parameters.  The return value of the subroutine is the
  61.  
  62.  
  63.  
  64. 30/Jan/96                perl 5.002 with                        1
  65.  
  66.  
  67.  
  68.  
  69.  
  70. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  71.  
  72.  
  73.        value of the last expression evaluated.  Alternatively, a
  74.        return statement may be used to specify the returned value
  75.        and exit the subroutine.  If you return one or more arrays
  76.        and/or hashes, these will be flattened together into one
  77.        large indistinguishable list.
  78.  
  79.        Perl does not have named formal parameters, but in
  80.        practice all you do is assign to a _m_y_(_) list of these.
  81.        Any variables you use in the function that aren't declared
  82.        private are global variables.  For the gory details on
  83.        creating private variables, see the sections below on
  84.        L<"Private Variables via my()"> and the section on
  85.        _/_"_T_e_m_p_o_r_a_r_y _V_a_l_u_e_s _v_i_a _l_o_c_a_l_(_).  To create protected
  86.        environments for a set of functions in a separate package
  87.        (and probably a separate file), see the section on
  88.        _P_a_c_k_a_g_e_s in the _p_e_r_l_m_o_d manpage.
  89.  
  90.        Example:
  91.  
  92.            ssssuuuubbbb mmmmaaaaxxxx {{{{
  93.                mmmmyyyy $$$$mmmmaaaaxxxx ==== sssshhhhiiiifffftttt((((@@@@____))));;;;
  94.                ffffoooorrrreeeeaaaacccchhhh $$$$ffffoooooooo ((((@@@@____)))) {{{{
  95.                    $$$$mmmmaaaaxxxx ==== $$$$ffffoooooooo iiiiffff $$$$mmmmaaaaxxxx <<<< $$$$ffffoooooooo;;;;
  96.                }}}}
  97.                rrrreeeettttuuuurrrrnnnn $$$$mmmmaaaaxxxx;;;;
  98.            }}}}
  99.            $$$$bbbbeeeessssttttddddaaaayyyy ==== mmmmaaaaxxxx(((($$$$mmmmoooonnnn,,,,$$$$ttttuuuueeee,,,,$$$$wwwweeeedddd,,,,$$$$tttthhhhuuuu,,,,$$$$ffffrrrriiii))));;;;
  100.  
  101.        Example:
  102.  
  103.            #### ggggeeeetttt aaaa lllliiiinnnneeee,,,, ccccoooommmmbbbbiiiinnnniiiinnnngggg ccccoooonnnnttttiiiinnnnuuuuaaaattttiiiioooonnnn lllliiiinnnneeeessss
  104.            ####  tttthhhhaaaatttt ssssttttaaaarrrrtttt wwwwiiiitttthhhh wwwwhhhhiiiitttteeeessssppppaaaacccceeee
  105.  
  106.            ssssuuuubbbb ggggeeeetttt____lllliiiinnnneeee {{{{
  107.                $$$$tttthhhhiiiisssslllliiiinnnneeee ==== $$$$llllooooooookkkkaaaahhhheeeeaaaadddd;;;;  #### GGGGLLLLOOOOBBBBAAAALLLL VVVVAAAARRRRIIIIAAAABBBBLLLLEEEESSSS!!!!!!!!
  108.                LLLLIIIINNNNEEEE:::: wwwwhhhhiiiilllleeee (((($$$$llllooooooookkkkaaaahhhheeeeaaaadddd ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>)))) {{{{
  109.                    iiiiffff (((($$$$llllooooooookkkkaaaahhhheeeeaaaadddd ====~~~~ ////^^^^[[[[ \\\\tttt]]]]////)))) {{{{
  110.                        $$$$tttthhhhiiiisssslllliiiinnnneeee ....==== $$$$llllooooooookkkkaaaahhhheeeeaaaadddd;;;;
  111.                    }}}}
  112.                    eeeellllsssseeee {{{{
  113.                        llllaaaasssstttt LLLLIIIINNNNEEEE;;;;
  114.                    }}}}
  115.                }}}}
  116.                $$$$tttthhhhiiiisssslllliiiinnnneeee;;;;
  117.            }}}}
  118.  
  119.            $$$$llllooooooookkkkaaaahhhheeeeaaaadddd ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;       #### ggggeeeetttt ffffiiiirrrrsssstttt lllliiiinnnneeee
  120.            wwwwhhhhiiiilllleeee (((($$$$____ ==== ggggeeeetttt____lllliiiinnnneeee(((()))))))) {{{{
  121.                ............
  122.            }}}}
  123.  
  124.        Use array assignment to a local list to name your formal
  125.        arguments:
  126.  
  127.  
  128.  
  129.  
  130. 30/Jan/96                perl 5.002 with                        2
  131.  
  132.  
  133.  
  134.  
  135.  
  136. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  137.  
  138.  
  139.            ssssuuuubbbb mmmmaaaayyyybbbbeeeesssseeeetttt {{{{
  140.                mmmmyyyy(((($$$$kkkkeeeeyyyy,,,, $$$$vvvvaaaalllluuuueeee)))) ==== @@@@____;;;;
  141.                $$$$FFFFoooooooo{{{{$$$$kkkkeeeeyyyy}}}} ==== $$$$vvvvaaaalllluuuueeee uuuunnnnlllleeeessssssss $$$$FFFFoooooooo{{{{$$$$kkkkeeeeyyyy}}}};;;;
  142.            }}}}
  143.  
  144.        This also has the effect of turning call-by-reference into
  145.        call-by-value, since the assignment copies the values.
  146.        Otherwise a function is free to do in-place modifications
  147.        of @@@@____ and change its callers values.
  148.  
  149.            uuuuppppccccaaaasssseeee____iiiinnnn(((($$$$vvvv1111,,,, $$$$vvvv2222))));;;;  #### tttthhhhiiiissss cccchhhhaaaannnnggggeeeessss $$$$vvvv1111 aaaannnndddd $$$$vvvv2222
  150.            ssssuuuubbbb uuuuppppccccaaaasssseeee____iiiinnnn {{{{
  151.                ffffoooorrrr ((((@@@@____)))) {{{{ ttttrrrr////aaaa----zzzz////AAAA----ZZZZ//// }}}}
  152.            }}}}
  153.  
  154.        You aren't allowed to modify constants in this way, of
  155.        course.  If an argument were actually literal and you
  156.        tried to change it, you'd take a (presumably fatal)
  157.        exception.   For example, this won't work:
  158.  
  159.            uuuuppppccccaaaasssseeee____iiiinnnn((((""""ffffrrrreeeeddddeeeerrrriiiicccckkkk""""))));;;;
  160.  
  161.        It would be much safer if the _u_p_c_a_s_e___i_n_(_) function were
  162.        written to return a copy of its parameters instead of
  163.        changing them in place:
  164.  
  165.            (((($$$$vvvv3333,,,, $$$$vvvv4444)))) ==== uuuuppppccccaaaasssseeee(((($$$$vvvv1111,,,, $$$$vvvv2222))));;;;  #### tttthhhhiiiissss ddddooooeeeessssnnnn''''tttt
  166.            ssssuuuubbbb uuuuppppccccaaaasssseeee {{{{
  167.                mmmmyyyy @@@@ppppaaaarrrrmmmmssss ==== @@@@____;;;;
  168.                ffffoooorrrr ((((@@@@ppppaaaarrrrmmmmssss)))) {{{{ ttttrrrr////aaaa----zzzz////AAAA----ZZZZ//// }}}}
  169.                #### wwwwaaaannnnttttaaaarrrrrrrraaaayyyy cccchhhheeeecccckkkkssss iiiiffff wwwweeee wwwweeeerrrreeee ccccaaaalllllllleeeedddd iiiinnnn lllliiiisssstttt ccccoooonnnntttteeeexxxxtttt
  170.                rrrreeeettttuuuurrrrnnnn wwwwaaaannnnttttaaaarrrrrrrraaaayyyy ???? @@@@ppppaaaarrrrmmmmssss :::: $$$$ppppaaaarrrrmmmmssss[[[[0000]]]];;;;
  171.            }}}}
  172.  
  173.        Notice how this (unprototyped) function doesn't care
  174.        whether it was passed real scalars or arrays.  Perl will
  175.        see everything as one big long flat @@@@____ parameter list.
  176.        This is one of the ways where Perl's simple argument-
  177.        passing style shines.  The _u_p_c_a_s_e_(_) function would work
  178.        perfectly well without changing the _u_p_c_a_s_e_(_) definition
  179.        even if we fed it things like this:
  180.  
  181.            @@@@nnnneeeewwwwlllliiiisssstttt   ==== uuuuppppccccaaaasssseeee((((@@@@lllliiiisssstttt1111,,,, @@@@lllliiiisssstttt2222))));;;;
  182.            @@@@nnnneeeewwwwlllliiiisssstttt   ==== uuuuppppccccaaaasssseeee(((( sssspppplllliiiitttt ////::::////,,,, $$$$vvvvaaaarrrr ))));;;;
  183.  
  184.        Do not, however, be tempted to do this:
  185.  
  186.            ((((@@@@aaaa,,,, @@@@bbbb))))   ==== uuuuppppccccaaaasssseeee((((@@@@lllliiiisssstttt1111,,,, @@@@lllliiiisssstttt2222))));;;;
  187.  
  188.        Because like its flat incoming parameter list, the return
  189.        list is also flat.  So all you have managed to do here is
  190.        stored everything in @@@@aaaa and made @@@@bbbb an empty list.  See
  191.        the section on _/_"_P_a_s_s _b_y _R_e_f_e_r_e_n_c_e for alternatives.
  192.  
  193.  
  194.  
  195.  
  196. 30/Jan/96                perl 5.002 with                        3
  197.  
  198.  
  199.  
  200.  
  201.  
  202. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  203.  
  204.  
  205.        A subroutine may be called using the "&" prefix.  The "&"
  206.        is optional in Perl 5, and so are the parens if the
  207.        subroutine has been predeclared.  (Note, however, that the
  208.        "&" is _N_O_T optional when you're just naming the
  209.        subroutine, such as when it's used as an argument to
  210.        _d_e_f_i_n_e_d_(_) or _u_n_d_e_f_(_).  Nor is it optional when you want to
  211.        do an indirect subroutine call with a subroutine name or
  212.        reference using the &&&&$$$$ssssuuuubbbbrrrreeeeffff(((()))) or &&&&{{{{$$$$ssssuuuubbbbrrrreeeeffff}}}}(((()))) constructs.
  213.        See the _p_e_r_l_r_e_f manpage for more on that.)
  214.  
  215.        Subroutines may be called recursively.  If a subroutine is
  216.        called using the "&" form, the argument list is optional,
  217.        and if omitted, no @@@@____ array is set up for the subroutine:
  218.        the @@@@____ array at the time of the call is visible to
  219.        subroutine instead.  This is an efficiency mechanism that
  220.        new users may wish to avoid.
  221.  
  222.            &&&&ffffoooooooo((((1111,,,,2222,,,,3333))));;;;        #### ppppaaaassssssss tttthhhhrrrreeeeeeee aaaarrrrgggguuuummmmeeeennnnttttssss
  223.            ffffoooooooo((((1111,,,,2222,,,,3333))));;;;         #### tttthhhheeee ssssaaaammmmeeee
  224.  
  225.            ffffoooooooo(((())));;;;              #### ppppaaaassssssss aaaa nnnnuuuullllllll lllliiiisssstttt
  226.            &&&&ffffoooooooo(((())));;;;             #### tttthhhheeee ssssaaaammmmeeee
  227.  
  228.            &&&&ffffoooooooo;;;;               #### ffffoooooooo(((()))) ggggeeeetttt ccccuuuurrrrrrrreeeennnntttt aaaarrrrggggssss,,,, lllliiiikkkkeeee ffffoooooooo((((@@@@____)))) !!!!!!!!
  229.            ffffoooooooo;;;;                #### lllliiiikkkkeeee ffffoooooooo(((()))) IIIIFFFFFFFF ssssuuuubbbb ffffoooooooo pppprrrreeee----ddddeeeeccccllllaaaarrrreeeedddd,,,, eeeellllsssseeee """"ffffoooooooo""""
  230.  
  231.        Not only does the "&" form make the argument list
  232.        optional, but it also disables any prototype checking on
  233.        the arguments you do provide.  This is partly for
  234.        historical reasons, and partly for having a convenient way
  235.        to cheat if you know what you're doing.  See the section
  236.        on Prototypes below.
  237.  
  238.        PPPPrrrriiiivvvvaaaatttteeee VVVVaaaarrrriiiiaaaabbbblllleeeessss vvvviiiiaaaa _m_y_(_)
  239.  
  240.        Synopsis:
  241.  
  242.            mmmmyyyy $$$$ffffoooooooo;;;;            #### ddddeeeeccccllllaaaarrrreeee $$$$ffffoooooooo lllleeeexxxxiiiiccccaaaallllllllyyyy llllooooccccaaaallll
  243.            mmmmyyyy ((((@@@@wwwwiiiidddd,,,, %%%%ggggeeeetttt))));;;;    #### ddddeeeeccccllllaaaarrrreeee lllliiiisssstttt ooooffff vvvvaaaarrrriiiiaaaabbbblllleeeessss llllooooccccaaaallll
  244.            mmmmyyyy $$$$ffffoooooooo ==== """"fffflllluuuurrrrpppp"""";;;;  #### ddddeeeeccccllllaaaarrrreeee $$$$ffffoooooooo lllleeeexxxxiiiiccccaaaallll,,,, aaaannnndddd iiiinnnniiiitttt iiiitttt
  245.            mmmmyyyy @@@@ooooooooffff ==== @@@@bbbbaaaarrrr;;;;     #### ddddeeeeccccllllaaaarrrreeee @@@@ooooooooffff lllleeeexxxxiiiiccccaaaallll,,,, aaaannnndddd iiiinnnniiiitttt iiiitttt
  246.  
  247.        A "my" declares the listed variables to be confined
  248.        (lexically) to the enclosing block, subroutine, eeeevvvvaaaallll, or
  249.        ddddoooo////rrrreeeeqqqquuuuiiiirrrreeee////uuuusssseeee'd file.  If more than one value is listed,
  250.        the list must be placed in parens.  All listed elements
  251.        must be legal lvalues.  Only alphanumeric identifiers may
  252.        be lexically scoped--magical builtins like $/ must
  253.        currently be localized with "local" instead.
  254.  
  255.        Unlike dynamic variables created by the "local" statement,
  256.        lexical variables declared with "my" are totally hidden
  257.        from the outside world, including any called subroutines
  258.        (even if it's the same subroutine called from itself or
  259.  
  260.  
  261.  
  262. 30/Jan/96                perl 5.002 with                        4
  263.  
  264.  
  265.  
  266.  
  267.  
  268. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  269.  
  270.  
  271.        elsewhere--every call gets its own copy).
  272.  
  273.        (An _e_v_a_l_(_), however, can see the lexical variables of the
  274.        scope it is being evaluated in so long as the names aren't
  275.        hidden by declarations within the _e_v_a_l_(_) itself.  See the
  276.        _p_e_r_l_r_e_f manpage.)
  277.  
  278.        The parameter list to _m_y_(_) may be assigned to if desired,
  279.        which allows you to initialize your variables.  (If no
  280.        initializer is given for a particular variable, it is
  281.        created with the undefined value.)  Commonly this is used
  282.        to name the parameters to a subroutine.  Examples:
  283.  
  284.            $$$$aaaarrrrgggg ==== """"ffffrrrreeeedddd"""";;;;        #### """"gggglllloooobbbbaaaallll"""" vvvvaaaarrrriiiiaaaabbbblllleeee
  285.            $$$$nnnn ==== ccccuuuubbbbeeee____rrrrooooooootttt((((22227777))));;;;
  286.            pppprrrriiiinnnntttt """"$$$$aaaarrrrgggg tttthhhhiiiinnnnkkkkssss tttthhhheeee rrrrooooooootttt iiiissss $$$$nnnn\\\\nnnn"""";;;;
  287.         ffffrrrreeeedddd tttthhhhiiiinnnnkkkkssss tttthhhheeee rrrrooooooootttt iiiissss 3333
  288.  
  289.            ssssuuuubbbb ccccuuuubbbbeeee____rrrrooooooootttt {{{{
  290.                mmmmyyyy $$$$aaaarrrrgggg ==== sssshhhhiiiifffftttt;;;;  #### nnnnaaaammmmeeee ddddooooeeeessssnnnn''''tttt mmmmaaaatttttttteeeerrrr
  291.                $$$$aaaarrrrgggg ********==== 1111////3333;;;;
  292.                rrrreeeettttuuuurrrrnnnn $$$$aaaarrrrgggg;;;;
  293.            }}}}
  294.  
  295.        The "my" is simply a modifier on something you might
  296.        assign to.  So when you do assign to the variables in its
  297.        argument list, the "my" doesn't change whether those
  298.        variables is viewed as a scalar or an array.  So
  299.  
  300.            mmmmyyyy (((($$$$ffffoooooooo)))) ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;
  301.            mmmmyyyy @@@@FFFFOOOOOOOO ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;
  302.  
  303.        both supply a list context to the righthand side, while
  304.  
  305.            mmmmyyyy $$$$ffffoooooooo ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;
  306.  
  307.        supplies a scalar context.  But the following only
  308.        declares one variable:
  309.  
  310.            mmmmyyyy $$$$ffffoooooooo,,,, $$$$bbbbaaaarrrr ==== 1111;;;;
  311.  
  312.        That has the same effect as
  313.  
  314.            mmmmyyyy $$$$ffffoooooooo;;;;
  315.            $$$$bbbbaaaarrrr ==== 1111;;;;
  316.  
  317.        The declared variable is not introduced (is not visible)
  318.        until after the current statement.  Thus,
  319.  
  320.            mmmmyyyy $$$$xxxx ==== $$$$xxxx;;;;
  321.  
  322.        can be used to initialize the new $$$$xxxx with the value of the
  323.        old $$$$xxxx, and the expression
  324.  
  325.  
  326.  
  327.  
  328. 30/Jan/96                perl 5.002 with                        5
  329.  
  330.  
  331.  
  332.  
  333.  
  334. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  335.  
  336.  
  337.            mmmmyyyy $$$$xxxx ==== 111122223333 aaaannnndddd $$$$xxxx ======== 111122223333
  338.  
  339.        is false unless the old $$$$xxxx happened to have the value 123.
  340.  
  341.        Some users may wish to encourage the use of lexically
  342.        scoped variables.  As an aid to catching implicit
  343.        references to package variables, if you say
  344.  
  345.            uuuusssseeee ssssttttrrrriiiicccctttt ''''vvvvaaaarrrrssss'''';;;;
  346.  
  347.        then any variable reference from there to the end of the
  348.        enclosing block must either refer to a lexical variable,
  349.        or must be fully qualified with the package name.  A
  350.        compilation error results otherwise.  An inner block may
  351.        countermand this with "no strict 'vars'".
  352.  
  353.        A _m_y_(_) has both a compile-time and a run-time effect.  At
  354.        compile time, the compiler takes notice of it; the
  355.        principle usefulness of this is to quiet uuuusssseeee ssssttttrrrriiiicccctttt
  356.        ''''vvvvaaaarrrrssss''''.  The actual initialization doesn't happen until
  357.        run time, so gets executed every time through a loop.
  358.  
  359.        Variables declared with "my" are not part of any package
  360.        and are therefore never fully qualified with the package
  361.        name.  In particular, you're not allowed to try to make a
  362.        package variable (or other global) lexical:
  363.  
  364.            mmmmyyyy $$$$ppppaaaacccckkkk::::::::vvvvaaaarrrr;;;;      #### EEEERRRRRRRROOOORRRR!!!!  IIIIlllllllleeeeggggaaaallll ssssyyyynnnnttttaaaaxxxx
  365.            mmmmyyyy $$$$____;;;;              #### aaaallllssssoooo iiiilllllllleeeeggggaaaallll ((((ccccuuuurrrrrrrreeeennnnttttllllyyyy))))
  366.  
  367.        In fact, a dynamic variable (also known as package or
  368.        global variables) are still accessible using the fully
  369.        qualified :: notation even while a lexical of the same
  370.        name is also visible:
  371.  
  372.            ppppaaaacccckkkkaaaaggggeeee mmmmaaaaiiiinnnn;;;;
  373.            llllooooccccaaaallll $$$$xxxx ==== 11110000;;;;
  374.            mmmmyyyy    $$$$xxxx ==== 22220000;;;;
  375.            pppprrrriiiinnnntttt """"$$$$xxxx aaaannnndddd $$$$::::::::xxxx\\\\nnnn"""";;;;
  376.  
  377.        That will print out 20 and 10.
  378.  
  379.        You may declare "my" variables at the outer most scope of
  380.        a file to totally hide any such identifiers from the
  381.        outside world.  This is similar to a C's static variables
  382.        at the file level.  To do this with a subroutine requires
  383.        the use of a closure (anonymous function).  If a block
  384.        (such as an _e_v_a_l_(_), function, or ppppaaaacccckkkkaaaaggggeeee) wants to create
  385.        a private subroutine that cannot be called from outside
  386.        that block, it can declare a lexical variable containing
  387.        an anonymous sub reference:
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. 30/Jan/96                perl 5.002 with                        6
  395.  
  396.  
  397.  
  398.  
  399.  
  400. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  401.  
  402.  
  403.            mmmmyyyy $$$$sssseeeeccccrrrreeeetttt____vvvveeeerrrrssssiiiioooonnnn ==== ''''1111....000000001111----bbbbeeeettttaaaa'''';;;;
  404.            mmmmyyyy $$$$sssseeeeccccrrrreeeetttt____ssssuuuubbbb ==== ssssuuuubbbb {{{{ pppprrrriiiinnnntttt $$$$sssseeeeccccrrrreeeetttt____vvvveeeerrrrssssiiiioooonnnn }}}};;;;
  405.            &&&&$$$$sssseeeeccccrrrreeeetttt____ssssuuuubbbb(((())));;;;
  406.  
  407.        As long as the reference is never returned by any function
  408.        within the module, no outside module can see the
  409.        subroutine, since its name is not in any package's symbol
  410.        table.  Remember that it's not _R_E_A_L_L_Y called
  411.        $$$$ssssoooommmmeeee____ppppaaaacccckkkk::::::::sssseeeeccccrrrreeeetttt____vvvveeeerrrrssssiiiioooonnnn or anything; it's just
  412.        $$$$sssseeeeccccrrrreeeetttt____vvvveeeerrrrssssiiiioooonnnn, unqualified and unqualifiable.
  413.  
  414.        This does not work with object methods, however; all
  415.        object methods have to be in the symbol table of some
  416.        package to be found.
  417.  
  418.        Just because the lexical variable is lexically (also
  419.        called statically) scoped doesn't mean that within a
  420.        function it works like a C static.  It normally works more
  421.        like a C auto.  But here's a mechanism for giving a
  422.        function private variables with both lexical scoping and a
  423.        static lifetime.  If you do want to create something like
  424.        C's static variables, just enclose the whole function in
  425.        an extra block, and put the static variable outside the
  426.        function but in the block.
  427.  
  428.            {{{{
  429.                mmmmyyyy $$$$sssseeeeccccrrrreeeetttt____vvvvaaaallll ==== 0000;;;;
  430.                ssssuuuubbbb ggggiiiimmmmmmmmeeee____aaaannnnooootttthhhheeeerrrr {{{{
  431.                    rrrreeeettttuuuurrrrnnnn ++++++++$$$$sssseeeeccccrrrreeeetttt____vvvvaaaallll;;;;
  432.                }}}}
  433.            }}}}
  434.            #### $$$$sssseeeeccccrrrreeeetttt____vvvvaaaallll nnnnoooowwww bbbbeeeeccccoooommmmeeeessss uuuunnnnrrrreeeeaaaacccchhhhaaaabbbblllleeee bbbbyyyy tttthhhheeee oooouuuuttttssssiiiiddddeeee
  435.            #### wwwwoooorrrrlllldddd,,,, bbbbuuuutttt rrrreeeettttaaaaiiiinnnnssss iiiittttssss vvvvaaaalllluuuueeee bbbbeeeettttwwwweeeeeeeennnn ccccaaaallllllllssss ttttoooo ggggiiiimmmmmmmmeeee____aaaannnnooootttthhhheeeerrrr
  436.  
  437.        If this function is being sourced in from a separate file
  438.        via rrrreeeeqqqquuuuiiiirrrreeee or uuuusssseeee, then this is probably just fine.  If
  439.        it's all in the main program, you'll need to arrange for
  440.        the _m_y_(_) to be executed early, either by putting the whole
  441.        block above your pain program, or more likely, merely
  442.        placing a BEGIN sub around it to make sure it gets
  443.        executed before your program starts to run:
  444.  
  445.            ssssuuuubbbb BBBBEEEEGGGGIIIINNNN {{{{
  446.                mmmmyyyy $$$$sssseeeeccccrrrreeeetttt____vvvvaaaallll ==== 0000;;;;
  447.                ssssuuuubbbb ggggiiiimmmmmmmmeeee____aaaannnnooootttthhhheeeerrrr {{{{
  448.                    rrrreeeettttuuuurrrrnnnn ++++++++$$$$sssseeeeccccrrrreeeetttt____vvvvaaaallll;;;;
  449.                }}}}
  450.            }}}}
  451.  
  452.        See the _p_e_r_l_r_u_n manpage about the BEGIN function.
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460. 30/Jan/96                perl 5.002 with                        7
  461.  
  462.  
  463.  
  464.  
  465.  
  466. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  467.  
  468.  
  469.        TTTTeeeemmmmppppoooorrrraaaarrrryyyy VVVVaaaalllluuuueeeessss vvvviiiiaaaa _l_o_c_a_l_(_)
  470.  
  471.        NNNNOOOOTTTTEEEE: In general, you should be using "my" instead of
  472.        "local", because it's faster and safer.  Execeptions to
  473.        this include the global punctuation variables, filehandles
  474.        and formats, and direct manipulation of the Perl symbol
  475.        table itself.  Format variables often use "local" though,
  476.        as do other variables whose current value must be visible
  477.        to called subroutines.
  478.  
  479.        Synopsis:
  480.  
  481.            llllooooccccaaaallll $$$$ffffoooooooo;;;;                 #### ddddeeeeccccllllaaaarrrreeee $$$$ffffoooooooo ddddyyyynnnnaaaammmmiiiiccccaaaallllllllyyyy llllooooccccaaaallll
  482.            llllooooccccaaaallll ((((@@@@wwwwiiiidddd,,,, %%%%ggggeeeetttt))));;;;         #### ddddeeeeccccllllaaaarrrreeee lllliiiisssstttt ooooffff vvvvaaaarrrriiiiaaaabbbblllleeeessss llllooooccccaaaallll
  483.            llllooooccccaaaallll $$$$ffffoooooooo ==== """"fffflllluuuurrrrpppp"""";;;;       #### ddddeeeeccccllllaaaarrrreeee $$$$ffffoooooooo ddddyyyynnnnaaaammmmiiiicccc,,,, aaaannnndddd iiiinnnniiiitttt iiiitttt
  484.            llllooooccccaaaallll @@@@ooooooooffff ==== @@@@bbbbaaaarrrr;;;;          #### ddddeeeeccccllllaaaarrrreeee @@@@ooooooooffff ddddyyyynnnnaaaammmmiiiicccc,,,, aaaannnndddd iiiinnnniiiitttt iiiitttt
  485.  
  486.            llllooooccccaaaallll ****FFFFHHHH;;;;                  #### llllooooccccaaaalllliiiizzzzeeee $$$$FFFFHHHH,,,, @@@@FFFFHHHH,,,, %%%%FFFFHHHH,,,, &&&&FFFFHHHH  ............
  487.            llllooooccccaaaallll ****mmmmeeeerrrrllllyyyynnnn ==== ****rrrraaaannnnddddaaaallll;;;;    #### nnnnoooowwww $$$$mmmmeeeerrrrllllyyyynnnn iiiissss rrrreeeeaaaallllllllyyyy $$$$rrrraaaannnnddddaaaallll,,,, pppplllluuuussss
  488.                                        ####     @@@@mmmmeeeerrrrllllyyyynnnn iiiissss rrrreeeeaaaallllllllyyyy @@@@rrrraaaannnnddddaaaallll,,,, eeeettttcccc
  489.            llllooooccccaaaallll ****mmmmeeeerrrrllllyyyynnnn ==== ''''rrrraaaannnnddddaaaallll'''';;;;   #### SSSSAAAAMMMMEEEE TTTTHHHHIIIINNNNGGGG:::: pppprrrroooommmmooootttteeee ''''rrrraaaannnnddddaaaallll'''' ttttoooo ****rrrraaaannnnddddaaaallll
  490.            llllooooccccaaaallll ****mmmmeeeerrrrllllyyyynnnn ==== \\\\$$$$rrrraaaannnnddddaaaallll;;;;   #### jjjjuuuusssstttt aaaalllliiiiaaaassss $$$$mmmmeeeerrrrllllyyyynnnn,,,, nnnnooootttt @@@@mmmmeeeerrrrllllyyyynnnn eeeettttcccc
  491.  
  492.        A _l_o_c_a_l_(_) modifies its listed variables to be local to the
  493.        enclosing block, (or subroutine, eeeevvvvaaaallll{{{{}}}} or ddddoooo) and _t_h_e _a_n_y
  494.        _c_a_l_l_e_d _f_r_o_m _w_i_t_h_i_n _t_h_a_t _b_l_o_c_k.  A _l_o_c_a_l_(_) just gives
  495.        temporary values to global (meaning package) variables.
  496.        This is known as dynamic scoping.  Lexical scoping is done
  497.        with "my", which works more like C's auto declarations.
  498.  
  499.        If more than one variable is given to _l_o_c_a_l_(_), they must
  500.        be placed in parens.  All listed elements must be legal
  501.        lvalues.  This operator works by saving the current values
  502.        of those variables in its argument list on a hidden stack
  503.        and restoring them upon exiting the block, subroutine or
  504.        eval.  This means that called subroutines can also
  505.        reference the local variable, but not the global one.  The
  506.        argument list may be assigned to if desired, which allows
  507.        you to initialize your local variables.  (If no
  508.        initializer is given for a particular variable, it is
  509.        created with an undefined value.)  Commonly this is used
  510.        to name the parameters to a subroutine.  Examples:
  511.  
  512.            ffffoooorrrr $$$$iiii (((( 0000 ........ 9999 )))) {{{{
  513.                $$$$ddddiiiiggggiiiittttssss{{{{$$$$iiii}}}} ==== $$$$iiii;;;;
  514.            }}}}
  515.            #### aaaassssssssuuuummmmeeee tttthhhhiiiissss ffffuuuunnnnccccttttiiiioooonnnn uuuusssseeeessss gggglllloooobbbbaaaallll %%%%ddddiiiiggggiiiittttssss hhhhaaaasssshhhh
  516.            ppppaaaarrrrsssseeee____nnnnuuuummmm(((())));;;;
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526. 30/Jan/96                perl 5.002 with                        8
  527.  
  528.  
  529.  
  530.  
  531.  
  532. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  533.  
  534.  
  535.            #### nnnnoooowwww tttteeeemmmmppppoooorrrraaaarrrriiiillllyyyy aaaadddddddd ttttoooo %%%%ddddiiiiggggiiiittttssss hhhhaaaasssshhhh
  536.            iiiiffff (((($$$$bbbbaaaasssseeee11112222)))) {{{{
  537.                #### ((((NNNNOOOOTTTTEEEE:::: nnnnooootttt ccccllllaaaaiiiimmmmiiiinnnngggg tttthhhhiiiissss iiiissss eeeeffffffffiiiicccciiiieeeennnntttt!!!!))))
  538.                llllooooccccaaaallll %%%%ddddiiiiggggiiiittttssss  ==== ((((%%%%ddddiiiiggggiiiittttssss,,,, ''''tttt'''' ====>>>> 11110000,,,, ''''eeee'''' ====>>>> 11111111))));;;;
  539.                ppppaaaarrrrsssseeee____nnnnuuuummmm(((())));;;;  #### ppppaaaarrrrsssseeee____nnnnuuuummmm ggggeeeettttssss tttthhhhiiiissss nnnneeeewwww %%%%ddddiiiiggggiiiittttssss!!!!
  540.            }}}}
  541.            #### oooolllldddd %%%%ddddiiiiggggiiiittttssss rrrreeeessssttttoooorrrreeeedddd hhhheeeerrrreeee
  542.  
  543.        Because _l_o_c_a_l_(_) is a run-time command, and so gets
  544.        executed every time through a loop.  In releases of Perl
  545.        previous to 5.0, this used more stack storage each time
  546.        until the loop was exited.  Perl now reclaims the space
  547.        each time through, but it's still more efficient to
  548.        declare your variables outside the loop.
  549.  
  550.        A local is simply a modifier on an lvalue expression.
  551.        When you assign to a localized variable, the local doesn't
  552.        change whether its list is viewed as a scalar or an array.
  553.        So
  554.  
  555.            llllooooccccaaaallll(((($$$$ffffoooooooo)))) ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;
  556.            llllooooccccaaaallll @@@@FFFFOOOOOOOO ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;
  557.  
  558.        both supply a list context to the righthand side, while
  559.  
  560.            llllooooccccaaaallll $$$$ffffoooooooo ==== <<<<SSSSTTTTDDDDIIIINNNN>>>>;;;;
  561.  
  562.        supplies a scalar context.
  563.  
  564.        PPPPaaaassssssssiiiinnnngggg SSSSyyyymmmmbbbboooollll TTTTaaaabbbblllleeee EEEEnnnnttttrrrriiiieeeessss ((((ttttyyyyppppeeeegggglllloooobbbbssss))))
  565.  
  566.        [Note:  The mechanism described in this section was
  567.        originally the only way to simulate pass-by-reference in
  568.        older versions of Perl.  While it still works fine in
  569.        modern versions, the new reference mechanism is generally
  570.        easier to work with.  See below.]
  571.  
  572.        Sometimes you don't want to pass the value of an array to
  573.        a subroutine but rather the name of it, so that the
  574.        subroutine can modify the global copy of it rather than
  575.        working with a local copy.  In perl you can refer to all
  576.        objects of a particular name by prefixing the name with a
  577.        star: ****ffffoooooooo.  This is often known as a "type glob", since
  578.        the star on the front can be thought of as a wildcard
  579.        match for all the funny prefix characters on variables and
  580.        subroutines and such.
  581.  
  582.        When evaluated, the type glob produces a scalar value that
  583.        represents all the objects of that name, including any
  584.        filehandle, format or subroutine.  When assigned to, it
  585.        causes the name mentioned to refer to whatever "*" value
  586.        was assigned to it.  Example:
  587.  
  588.  
  589.  
  590.  
  591.  
  592. 30/Jan/96                perl 5.002 with                        9
  593.  
  594.  
  595.  
  596.  
  597.  
  598. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  599.  
  600.  
  601.            ssssuuuubbbb ddddoooouuuubbbblllleeeeaaaarrrryyyy {{{{
  602.                llllooooccccaaaallll((((****ssssoooommmmeeeeaaaarrrryyyy)))) ==== @@@@____;;;;
  603.                ffffoooorrrreeeeaaaacccchhhh $$$$eeeelllleeeemmmm ((((@@@@ssssoooommmmeeeeaaaarrrryyyy)))) {{{{
  604.                    $$$$eeeelllleeeemmmm ****==== 2222;;;;
  605.                }}}}
  606.            }}}}
  607.            ddddoooouuuubbbblllleeeeaaaarrrryyyy((((****ffffoooooooo))));;;;
  608.            ddddoooouuuubbbblllleeeeaaaarrrryyyy((((****bbbbaaaarrrr))));;;;
  609.  
  610.        Note that scalars are already passed by reference, so you
  611.        can modify scalar arguments without using this mechanism
  612.        by referring explicitly to $$$$____[0] etc.  You can modify all
  613.        the elements of an array by passing all the elements as
  614.        scalars, but you have to use the * mechanism (or the
  615.        equivalent reference mechanism) to push, pop or change the
  616.        size of an array.  It will certainly be faster to pass the
  617.        typeglob (or reference).
  618.  
  619.        Even if you don't want to modify an array, this mechanism
  620.        is useful for passing multiple arrays in a single LIST,
  621.        since normally the LIST mechanism will merge all the array
  622.        values so that you can't extract out the individual
  623.        arrays.  For more on typeglobs, see the section on
  624.        _T_y_p_e_g_l_o_b_s in the _p_e_r_l_d_a_t_a manpage.
  625.  
  626.        PPPPaaaassssssss bbbbyyyy RRRReeeeffffeeeerrrreeeennnncccceeee
  627.  
  628.        If you want to pass more than one array or hash into a
  629.        function--or return them from it--and have them maintain
  630.        their integrity, then you're going to have to use an
  631.        explicit pass-by-reference.  Before you do that, you need
  632.        to understand references as detailed in the _p_e_r_l_r_e_f
  633.        manpage.  This section may not make much sense to you
  634.        otherwise.
  635.  
  636.        Here are a few simple examples.  First, let's pass in
  637.        several arrays to a function and have it pop all of then,
  638.        return a new list of all their former last elements:
  639.  
  640.            @@@@ttttaaaaiiiilllliiiinnnnggggssss ==== ppppooooppppmmmmaaaannnnyyyy (((( \\\\@@@@aaaa,,,, \\\\@@@@bbbb,,,, \\\\@@@@cccc,,,, \\\\@@@@dddd ))));;;;
  641.  
  642.            ssssuuuubbbb ppppooooppppmmmmaaaannnnyyyy {{{{
  643.                mmmmyyyy $$$$aaaarrrreeeeffff;;;;
  644.                mmmmyyyy @@@@rrrreeeettttlllliiiisssstttt ==== (((())));;;;
  645.                ffffoooorrrreeeeaaaacccchhhh $$$$aaaarrrreeeeffff (((( @@@@____ )))) {{{{
  646.                    ppppuuuusssshhhh @@@@rrrreeeettttlllliiiisssstttt,,,, ppppoooopppp @@@@$$$$aaaarrrreeeeffff;;;;
  647.                }}}}
  648.                rrrreeeettttuuuurrrrnnnn @@@@rrrreeeettttlllliiiisssstttt;;;;
  649.            }}}}
  650.  
  651.        Here's how you might write a function that returns a list
  652.        of keys occurring in all the hashes passed to it:
  653.  
  654.  
  655.  
  656.  
  657.  
  658. 30/Jan/96                perl 5.002 with                       10
  659.  
  660.  
  661.  
  662.  
  663.  
  664. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  665.  
  666.  
  667.            @@@@ccccoooommmmmmmmoooonnnn ==== iiiinnnntttteeeerrrr(((( \\\\%%%%ffffoooooooo,,,, \\\\%%%%bbbbaaaarrrr,,,, \\\\%%%%jjjjooooeeee ))));;;;
  668.            ssssuuuubbbb iiiinnnntttteeeerrrr {{{{
  669.                mmmmyyyy (((($$$$kkkk,,,, $$$$hhhhrrrreeeeffff,,,, %%%%sssseeeeeeeennnn))));;;; #### llllooooccccaaaallllssss
  670.                ffffoooorrrreeeeaaaacccchhhh $$$$hhhhrrrreeeeffff ((((@@@@____)))) {{{{
  671.                    wwwwhhhhiiiilllleeee (((( $$$$kkkk ==== eeeeaaaacccchhhh %%%%$$$$hhhhrrrreeeeffff )))) {{{{
  672.                        $$$$sssseeeeeeeennnn{{{{$$$$kkkk}}}}++++++++;;;;
  673.                    }}}}
  674.                }}}}
  675.                rrrreeeettttuuuurrrrnnnn ggggrrrreeeepppp {{{{ $$$$sssseeeeeeeennnn{{{{$$$$____}}}} ======== @@@@____ }}}} kkkkeeeeyyyyssss %%%%sssseeeeeeeennnn;;;;
  676.            }}}}
  677.  
  678.        So far, we're just using the normal list return mechanism.
  679.        What happens if you want to pass or return a hash?  Well,
  680.        if you're only using one of them, or you don't mind them
  681.        concatenating, then the normal calling convention is ok,
  682.        although a little expensive.
  683.  
  684.        Where people get into trouble is here:
  685.  
  686.            ((((@@@@aaaa,,,, @@@@bbbb)))) ==== ffffuuuunnnncccc((((@@@@cccc,,,, @@@@dddd))));;;;
  687.        oooorrrr
  688.            ((((%%%%aaaa,,,, %%%%bbbb)))) ==== ffffuuuunnnncccc((((%%%%cccc,,,, %%%%dddd))));;;;
  689.  
  690.        That syntax simply won't work.  It just sets @@@@aaaa or %%%%aaaa and
  691.        clears the @@@@bbbb or %%%%bbbb.  Plus the function didn't get passed
  692.        into two separate arrays or hashes: it got one long list
  693.        in @@@@____, as always.
  694.  
  695.        If you can arrange for everyone to deal with this through
  696.        references, it's cleaner code, although not so nice to
  697.        look at.  Here's a function that takes two array
  698.        references as arguments, returning the two array elements
  699.        in order of how many elements they have in them:
  700.  
  701.            (((($$$$aaaarrrreeeeffff,,,, $$$$bbbbrrrreeeeffff)))) ==== ffffuuuunnnncccc((((\\\\@@@@cccc,,,, \\\\@@@@dddd))));;;;
  702.            pppprrrriiiinnnntttt """"@@@@$$$$aaaarrrreeeeffff hhhhaaaassss mmmmoooorrrreeee tttthhhhaaaannnn @@@@$$$$bbbbrrrreeeeffff\\\\nnnn"""";;;;
  703.            ssssuuuubbbb ffffuuuunnnncccc {{{{
  704.                mmmmyyyy (((($$$$ccccrrrreeeeffff,,,, $$$$ddddrrrreeeeffff)))) ==== @@@@____;;;;
  705.                iiiiffff ((((@@@@$$$$ccccrrrreeeeffff >>>> @@@@$$$$ddddrrrreeeeffff)))) {{{{
  706.                    rrrreeeettttuuuurrrrnnnn (((($$$$ccccrrrreeeeffff,,,, $$$$ddddrrrreeeeffff))));;;;
  707.                }}}} eeeellllsssseeee {{{{
  708.                    rrrreeeettttuuuurrrrnnnn (((($$$$ddddrrrreeeeffff,,,, $$$$ccccrrrreeeeffff))));;;;
  709.                }}}}
  710.            }}}}
  711.  
  712.        It turns out that you can actually do this also:
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724. 30/Jan/96                perl 5.002 with                       11
  725.  
  726.  
  727.  
  728.  
  729.  
  730. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  731.  
  732.  
  733.            ((((****aaaa,,,, ****bbbb)))) ==== ffffuuuunnnncccc((((\\\\@@@@cccc,,,, \\\\@@@@dddd))));;;;
  734.            pppprrrriiiinnnntttt """"@@@@aaaa hhhhaaaassss mmmmoooorrrreeee tttthhhhaaaannnn @@@@bbbb\\\\nnnn"""";;;;
  735.            ssssuuuubbbb ffffuuuunnnncccc {{{{
  736.                llllooooccccaaaallll ((((****cccc,,,, ****dddd)))) ==== @@@@____;;;;
  737.                iiiiffff ((((@@@@cccc >>>> @@@@dddd)))) {{{{
  738.                    rrrreeeettttuuuurrrrnnnn ((((\\\\@@@@cccc,,,, \\\\@@@@dddd))));;;;
  739.                }}}} eeeellllsssseeee {{{{
  740.                    rrrreeeettttuuuurrrrnnnn ((((\\\\@@@@dddd,,,, \\\\@@@@cccc))));;;;
  741.                }}}}
  742.            }}}}
  743.  
  744.        Here we're using the typeglobs to do symbol table
  745.        aliasing.  It's a tad subtle, though, and also won't work
  746.        if you're using _m_y_(_) variables, since only globals (well,
  747.        and _l_o_c_a_l_(_)s) are in the symbol table.
  748.  
  749.        If you're passing around filehandles, you could usually
  750.        just use the bare typeglob, like *STDOUT, but typeglobs
  751.        references would be better because they'll still work
  752.        properly under uuuusssseeee ssssttttrrrriiiicccctttt ''''rrrreeeeffffssss''''.  For example:
  753.  
  754.            sssspppplllluuuutttttttteeeerrrr((((\\\\****SSSSTTTTDDDDOOOOUUUUTTTT))));;;;
  755.            ssssuuuubbbb sssspppplllluuuutttttttteeeerrrr {{{{
  756.                mmmmyyyy $$$$ffffhhhh ==== sssshhhhiiiifffftttt;;;;
  757.                pppprrrriiiinnnntttt $$$$ffffhhhh """"hhhheeeerrrr uuuummmm wwwweeeellllllll aaaa hhhhmmmmmmmmmmmm\\\\nnnn"""";;;;
  758.            }}}}
  759.  
  760.            $$$$rrrreeeecccc ==== ggggeeeetttt____rrrreeeecccc((((\\\\****SSSSTTTTDDDDIIIINNNN))));;;;
  761.            ssssuuuubbbb ggggeeeetttt____rrrreeeecccc {{{{
  762.                mmmmyyyy $$$$ffffhhhh ==== sssshhhhiiiifffftttt;;;;
  763.                rrrreeeettttuuuurrrrnnnn ssssccccaaaallllaaaarrrr <<<<$$$$ffffhhhh>>>>;;;;
  764.            }}}}
  765.  
  766.        If you're planning on generating new filehandles, you
  767.        could do this:
  768.  
  769.            ssssuuuubbbb ooooppppeeeennnniiiitttt {{{{
  770.                mmmmyyyy $$$$nnnnaaaammmmeeee ==== sssshhhhiiiifffftttt;;;;
  771.                llllooooccccaaaallll ****FFFFHHHH;;;;
  772.                rrrreeeettttuuuurrrrnnnn ooooppppeeeennnn ((((FFFFHHHH,,,, $$$$ppppaaaatttthhhh)))) ???? \\\\****FFFFHHHH :::: uuuunnnnddddeeeeffff;;;;
  773.            }}}}
  774.  
  775.        Although that will actually produce a small memory leak.
  776.        See the bottom of the ooooppppeeeennnn(((()))) entry in the _p_e_r_l_f_u_n_c manpage
  777.        for a somewhat cleaner way using the FileHandle functions
  778.        supplied with the POSIX package.
  779.  
  780.        PPPPrrrroooottttoooottttyyyyppppeeeessss
  781.  
  782.        As of the 5.002 release of perl, if you declare
  783.  
  784.            ssssuuuubbbb mmmmyyyyppppuuuusssshhhh ((((\\\\@@@@@@@@))))
  785.  
  786.        then _m_y_p_u_s_h_(_) takes arguments exactly like _p_u_s_h_(_) does.
  787.  
  788.  
  789.  
  790. 30/Jan/96                perl 5.002 with                       12
  791.  
  792.  
  793.  
  794.  
  795.  
  796. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  797.  
  798.  
  799.        The declaration of the function to be called must be
  800.        visible at compile time.  The prototype only affects the
  801.        interpretation of new-style calls to the function, where
  802.        new-style is defined as not using the &&&& character.  In
  803.        other words, if you call it like a builtin function, then
  804.        it behaves like a builtin function.  If you call it like
  805.        an old-fashioned subroutine, then it behaves like an old-
  806.        fashioned subroutine.  It naturally falls out from this
  807.        rule that prototypes have no influence on subroutine
  808.        references like \\\\&&&&ffffoooooooo or on indirect subroutine calls like
  809.        &&&&{{{{$$$$ssssuuuubbbbrrrreeeeffff}}}}.
  810.  
  811.        Method calls are not influenced by prototypes either,
  812.        because the function to be called is indeterminate at
  813.        compile time, since it depends on inheritance.
  814.  
  815.        Since the intent is primarily to let you define
  816.        subroutines that work like builtin commands, here are the
  817.        prototypes for some other functions that parse almost
  818.        exactly like the corresponding builtins.
  819.  
  820.            DDDDeeeeccccllllaaaarrrreeeedddd aaaassss                 CCCCaaaalllllllleeeedddd aaaassss
  821.  
  822.            ssssuuuubbbb mmmmyyyylllliiiinnnnkkkk (((($$$$$$$$))))             mmmmyyyylllliiiinnnnkkkk $$$$oooolllldddd,,,, $$$$nnnneeeewwww
  823.            ssssuuuubbbb mmmmyyyyvvvveeeecccc (((($$$$$$$$$$$$))))             mmmmyyyyvvvveeeecccc $$$$vvvvaaaarrrr,,,, $$$$ooooffffffffsssseeeetttt,,,, 1111
  824.            ssssuuuubbbb mmmmyyyyiiiinnnnddddeeeexxxx (((($$$$$$$$;;;;$$$$))))          mmmmyyyyiiiinnnnddddeeeexxxx &&&&ggggeeeettttssssttttrrrriiiinnnngggg,,,, """"ssssuuuubbbbssssttttrrrr""""
  825.            ssssuuuubbbb mmmmyyyyssssyyyysssswwwwrrrriiiitttteeee (((($$$$$$$$$$$$;;;;$$$$))))      mmmmyyyyssssyyyysssswwwwrrrriiiitttteeee $$$$bbbbuuuuffff,,,, 0000,,,, lllleeeennnnggggtttthhhh(((($$$$bbbbuuuuffff)))) ---- $$$$ooooffffffff,,,, $$$$ooooffffffff
  826.            ssssuuuubbbb mmmmyyyyrrrreeeevvvveeeerrrrsssseeee ((((@@@@))))           mmmmyyyyrrrreeeevvvveeeerrrrsssseeee $$$$aaaa,,,,$$$$bbbb,,,,$$$$cccc
  827.            ssssuuuubbbb mmmmyyyyjjjjooooiiiinnnn (((($$$$@@@@))))             mmmmyyyyjjjjooooiiiinnnn """"::::"""",,,,$$$$aaaa,,,,$$$$bbbb,,,,$$$$cccc
  828.            ssssuuuubbbb mmmmyyyyppppoooopppp ((((\\\\@@@@))))              mmmmyyyyppppoooopppp @@@@aaaarrrrrrrraaaayyyy
  829.            ssssuuuubbbb mmmmyyyysssspppplllliiiicccceeee ((((\\\\@@@@$$$$$$$$@@@@))))        mmmmyyyysssspppplllliiiicccceeee @@@@aaaarrrrrrrraaaayyyy,,,,@@@@aaaarrrrrrrraaaayyyy,,,,0000,,,,@@@@ppppuuuusssshhhhmmmmeeee
  830.            ssssuuuubbbb mmmmyyyykkkkeeeeyyyyssss ((((\\\\%%%%))))             mmmmyyyykkkkeeeeyyyyssss %%%%{{{{$$$$hhhhaaaasssshhhhrrrreeeeffff}}}}
  831.            ssssuuuubbbb mmmmyyyyooooppppeeeennnn ((((****;;;;$$$$))))            mmmmyyyyooooppppeeeennnn HHHHAAAANNNNDDDDLLLLEEEE,,,, $$$$nnnnaaaammmmeeee
  832.            ssssuuuubbbb mmmmyyyyppppiiiippppeeee ((((********))))             mmmmyyyyppppiiiippppeeee RRRREEEEAAAADDDDHHHHAAAANNNNDDDDLLLLEEEE,,,, WWWWRRRRIIIITTTTEEEEHHHHAAAANNNNDDDDLLLLEEEE
  833.            ssssuuuubbbb mmmmyyyyggggrrrreeeepppp ((((&&&&@@@@))))             mmmmyyyyggggrrrreeeepppp {{{{ ////ffffoooooooo//// }}}} $$$$aaaa,,,,$$$$bbbb,,,,$$$$cccc
  834.            ssssuuuubbbb mmmmyyyyrrrraaaannnndddd (((($$$$))))              mmmmyyyyrrrraaaannnndddd 44442222
  835.            ssssuuuubbbb mmmmyyyyttttiiiimmmmeeee (((())))               mmmmyyyyttttiiiimmmmeeee
  836.  
  837.        Any backslashed prototype character represents an actual
  838.        argument that absolutely must start with that character.
  839.  
  840.        Unbackslashed prototype characters have special meanings.
  841.        Any unbackslashed @ or % eats all the rest of the
  842.        arguments, and forces list context.  An argument
  843.        represented by $ forces scalar context.  An & requires an
  844.        anonymous subroutine, which, if passed as the first
  845.        argument, does not require the "sub" keyword or a
  846.        subsequent comma.  A * does whatever it has to do to turn
  847.        the argument into a reference to a symbol table entry.
  848.  
  849.        A semicolon separates mandatory arguments from optional
  850.        arguments.  (It is redundant before @ or %.)
  851.  
  852.        Note how the last three examples above are treated
  853.  
  854.  
  855.  
  856. 30/Jan/96                perl 5.002 with                       13
  857.  
  858.  
  859.  
  860.  
  861.  
  862. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  863.  
  864.  
  865.        specially by the parser.  _m_y_g_r_e_p_(_) is parsed as a true
  866.        list operator, _m_y_r_a_n_d_(_) is parsed as a true unary operator
  867.        with unary precedence the same as _r_a_n_d_(_), and _m_y_t_i_m_e_(_) is
  868.        truly argumentless, just like _t_i_m_e_(_).  That is, if you say
  869.  
  870.            mmmmyyyyttttiiiimmmmeeee ++++2222;;;;
  871.  
  872.        you'll get _m_y_t_i_m_e_(_) + 2, not _m_y_t_i_m_e(2), which is how it
  873.        would be parsed without the prototype.
  874.  
  875.        The interesting thing about & is that you can generate new
  876.        syntax with it:
  877.  
  878.            ssssuuuubbbb ttttrrrryyyy ((((&&&&$$$$)))) {{{{
  879.                mmmmyyyy(((($$$$ttttrrrryyyy,,,,$$$$ccccaaaattttcccchhhh)))) ==== @@@@____;;;;
  880.                eeeevvvvaaaallll {{{{ &&&&$$$$ttttrrrryyyy }}}};;;;
  881.                iiiiffff (((($$$$@@@@)))) {{{{
  882.                    llllooooccccaaaallll $$$$____ ==== $$$$@@@@;;;;
  883.                    &&&&$$$$ccccaaaattttcccchhhh;;;;
  884.                }}}}
  885.            }}}}
  886.            ssssuuuubbbb ccccaaaattttcccchhhh ((((&&&&)))) {{{{ @@@@____ }}}}
  887.  
  888.            ttttrrrryyyy {{{{
  889.                ddddiiiieeee """"pppphhhhooooooooeeeeyyyy"""";;;;
  890.            }}}} ccccaaaattttcccchhhh {{{{
  891.                ////pppphhhhooooooooeeeeyyyy//// aaaannnndddd pppprrrriiiinnnntttt """"uuuunnnnpppphhhhooooooooeeeeyyyy\\\\nnnn"""";;;;
  892.            }}}};;;;
  893.  
  894.        That prints "unphooey".  (Yes, there are still unresolved
  895.        issues having to do with the visibility of @@@@____.  I'm
  896.        ignoring that question for the moment.  (But note that if
  897.        we make @@@@____ lexically scoped, those anonymous subroutines
  898.        can act like closures... (Gee, is this sounding a little
  899.        Lispish?  (Nevermind.))))
  900.  
  901.        And here's a reimplementation of grep:
  902.  
  903.            ssssuuuubbbb mmmmyyyyggggrrrreeeepppp ((((&&&&@@@@)))) {{{{
  904.                mmmmyyyy $$$$ccccooooddddeeee ==== sssshhhhiiiifffftttt;;;;
  905.                mmmmyyyy @@@@rrrreeeessssuuuulllltttt;;;;
  906.                ffffoooorrrreeeeaaaacccchhhh $$$$____ ((((@@@@____)))) {{{{
  907.                    ppppuuuusssshhhh((((@@@@rrrreeeessssuuuulllltttt,,,, $$$$____)))) iiiiffff &&&&$$$$rrrreeeeffff;;;;
  908.                }}}}
  909.                @@@@rrrreeeessssuuuulllltttt;;;;
  910.            }}}}
  911.  
  912.        Some folks would prefer full alphanumeric prototypes.
  913.        Alphanumerics have been intentionally left out of
  914.        prototypes for the express purpose of someday in the
  915.        future adding named, formal parameters.  The current
  916.        mechanism's main goal is to let module writers provide
  917.        better diagnostics for module users.  Larry feels the
  918.        notation quite understandable to Perl programmers, and
  919.  
  920.  
  921.  
  922. 30/Jan/96                perl 5.002 with                       14
  923.  
  924.  
  925.  
  926.  
  927.  
  928. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  929.  
  930.  
  931.        that it will not intrude greatly upon the meat of the
  932.        module, nor make it harder to read.  The line noise is
  933.        visually encapsulated into a small pill that's easy to
  934.        swallow.
  935.  
  936.        It's probably best to prototype new functions, not
  937.        retrofit prototyping into older ones.  That's because you
  938.        must be especially careful about silent impositions of
  939.        differing list versus scalar contexts.  For example, if
  940.        you decide that a function should take just one parameter,
  941.        like this:
  942.  
  943.            ssssuuuubbbb ffffuuuunnnncccc (((($$$$)))) {{{{
  944.                mmmmyyyy $$$$nnnn ==== sssshhhhiiiifffftttt;;;;
  945.                pppprrrriiiinnnntttt """"yyyyoooouuuu ggggaaaavvvveeee mmmmeeee $$$$nnnn\\\\nnnn"""";;;;
  946.            }}}}
  947.  
  948.        and someone has been calling it with an array or
  949.        expression returning a list:
  950.  
  951.            ffffuuuunnnncccc((((@@@@ffffoooooooo))));;;;
  952.            ffffuuuunnnncccc(((( sssspppplllliiiitttt ////:::://// ))));;;;
  953.  
  954.        Then you've just supplied an automatic _s_c_a_l_a_r_(_) in front
  955.        of their argument, which can be more than a bit
  956.        surprising.  The old @@@@ffffoooooooo which used to hold one thing
  957.        doesn't get passed in.  Instead, the _f_u_n_c_(_) now gets
  958.        passed in 1, that is, the number of elments in @@@@ffffoooooooo.  And
  959.        the _s_p_l_i_t_(_) gets called in a scalar context and starts
  960.        scribbling on your @@@@____ parameter list.
  961.  
  962.        This is all very powerful, of course, and should only be
  963.        used in moderation to make the world a better place.
  964.  
  965.        OOOOvvvveeeerrrrrrrriiiiddddiiiinnnngggg BBBBuuuuiiiillllttttiiiinnnn FFFFuuuunnnnccccttttiiiioooonnnnssss
  966.  
  967.        Many builtin functions may be overridden, though this
  968.        should only be tried occasionally and for good reason.
  969.        Typically this might be done by a package attempting to
  970.        emulate missing builtin functionality on a non-Unix
  971.        system.
  972.  
  973.        Overriding may only be done by importing the name from a
  974.        module--ordinary predeclaration isn't good enough.
  975.        However, the ssssuuuubbbbssss pragma (compiler directive) lets you, in
  976.        effect, predeclare subs via the import syntax, and these
  977.        names may then override the builtin ones:
  978.  
  979.            uuuusssseeee ssssuuuubbbbssss ''''cccchhhhddddiiiirrrr'''',,,, ''''cccchhhhrrrrooooooootttt'''',,,, ''''cccchhhhmmmmoooodddd'''',,,, ''''cccchhhhoooowwwwnnnn'''';;;;
  980.            cccchhhhddddiiiirrrr $$$$ssssoooommmmeeeewwwwhhhheeeerrrreeee;;;;
  981.            ssssuuuubbbb cccchhhhddddiiiirrrr {{{{ ............ }}}}
  982.  
  983.        Library modules should not in general export builtin names
  984.        like "open" or "chdir" as part of their default @@@@EEEEXXXXPPPPOOOORRRRTTTT
  985.  
  986.  
  987.  
  988. 30/Jan/96                perl 5.002 with                       15
  989.  
  990.  
  991.  
  992.  
  993.  
  994. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  995.  
  996.  
  997.        list, since these may sneak into someone else's namespace
  998.        and change the semantics unexpectedly.  Instead, if the
  999.        module adds the name to the @@@@EEEEXXXXPPPPOOOORRRRTTTT____OOOOKKKK list, then it's
  1000.        possible for a user to import the name explicitly, but not
  1001.        implicitly.  That is, they could say
  1002.  
  1003.            uuuusssseeee MMMMoooodddduuuulllleeee ''''ooooppppeeeennnn'''';;;;
  1004.  
  1005.        and it would import the open override, but if they said
  1006.  
  1007.            uuuusssseeee MMMMoooodddduuuulllleeee;;;;
  1008.  
  1009.        they would get the default imports without the overrides.
  1010.  
  1011.        AAAAuuuuttttoooollllooooaaaaddddiiiinnnngggg
  1012.  
  1013.        If you call a subroutine that is undefined, you would
  1014.        ordinarily get an immediate fatal error complaining that
  1015.        the subroutine doesn't exist.  (Likewise for subroutines
  1016.        being used as methods, when the method doesn't exist in
  1017.        any of the base classes of the class package.) If,
  1018.        however, there is an AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD subroutine defined in the
  1019.        package or packages that were searched for the original
  1020.        subroutine, then that AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD subroutine is called with
  1021.        the arguments that would have been passed to the original
  1022.        subroutine.  The fully qualified name of the original
  1023.        subroutine magically appears in the $$$$AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD variable in
  1024.        the same package as the AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD routine.  The name is not
  1025.        passed as an ordinary argument because, er, well, just
  1026.        because, that's why...
  1027.  
  1028.        Most AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD routines will load in a definition for the
  1029.        subroutine in question using eval, and then execute that
  1030.        subroutine using a special form of "goto" that erases the
  1031.        stack frame of the AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD routine without a trace.  (See
  1032.        the standard AAAAuuuuttttooooLLLLooooaaaaddddeeeerrrr module, for example.)  But an
  1033.        AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD routine can also just emulate the routine and
  1034.        never define it.   For example, let's pretend that a
  1035.        function that wasn't defined should just call _s_y_s_t_e_m_(_)
  1036.        with those arguments.  All you'd do is this:
  1037.  
  1038.            ssssuuuubbbb AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD {{{{
  1039.                mmmmyyyy $$$$pppprrrrooooggggrrrraaaammmm ==== $$$$AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD;;;;
  1040.                $$$$pppprrrrooooggggrrrraaaammmm ====~~~~ ssss////....****::::::::////////;;;;
  1041.                ssssyyyysssstttteeeemmmm(((($$$$pppprrrrooooggggrrrraaaammmm,,,, @@@@____))));;;;
  1042.            }}}}
  1043.            ddddaaaatttteeee(((())));;;;
  1044.            wwwwhhhhoooo((((''''aaaammmm'''',,,, iiii''''))));;;;
  1045.            llllssss((((''''----llll''''))));;;;
  1046.  
  1047.        In fact, if you preclare the functions you want to call
  1048.        that way, you don't even need the parentheses:
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054. 30/Jan/96                perl 5.002 with                       16
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060. PERLSUB(1)     User Contributed Perl Documentation     PERLSUB(1)
  1061.  
  1062.  
  1063.            uuuusssseeee ssssuuuubbbbssss qqqqwwww((((ddddaaaatttteeee wwwwhhhhoooo llllssss))));;;;
  1064.            ddddaaaatttteeee;;;;
  1065.            wwwwhhhhoooo """"aaaammmm"""",,,, """"iiii"""";;;;
  1066.            llllssss ----llll;;;;
  1067.  
  1068.        A more complete example of this is the standard Shell
  1069.        module, which can treat undefined subroutine calls as
  1070.        calls to Unix programs.
  1071.  
  1072.        Mechanisms are available for modules writers to help split
  1073.        the modules up into autoloadable files.  See the standard
  1074.        AutoLoader module described in the _A_u_t_o_l_o_a_d_e_r manpage, the
  1075.        standard SelfLoader modules in the _S_e_l_f_L_o_a_d_e_r manpage, and
  1076.        the document on adding C functions to perl code in the
  1077.        _p_e_r_l_x_s manpage.
  1078.  
  1079. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  1080.        See the _p_e_r_l_r_e_f manpage for more on references.  See the
  1081.        _p_e_r_l_x_s manpage if you'd like to learn about calling C
  1082.        subroutines from perl.  See the _p_e_r_l_m_o_d manpage to learn
  1083.        about bundling up your functions in separate files.
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120. 30/Jan/96                perl 5.002 with                       17
  1121.  
  1122.  
  1123.