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 / perlref.0 < prev    next >
Text File  |  1996-03-02  |  36KB  |  661 lines

  1.  
  2.  
  3.  
  4. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  5.  
  6.  
  7. NNNNAAAAMMMMEEEE
  8.        perlref - Perl references and nested data structures
  9.  
  10. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  11.        Before release 5 of Perl it was difficult to represent
  12.        complex data structures, because all references had to be
  13.        symbolic, and even that was difficult to do when you
  14.        wanted to refer to a variable rather than a symbol table
  15.        entry.  Perl 5 not only makes it easier to use symbolic
  16.        references to variables, but lets you have "hard"
  17.        references to any piece of data.  Any scalar may hold a
  18.        hard reference.  Since arrays and hashes contain scalars,
  19.        you can now easily build arrays of arrays, arrays of
  20.        hashes, hashes of arrays, arrays of hashes of functions,
  21.        and so on.
  22.  
  23.        Hard references are smart--they keep track of reference
  24.        counts for you, automatically freeing the thing referred
  25.        to when its reference count goes to zero.  If that thing
  26.        happens to be an object, the object is destructed.  See
  27.        the _p_e_r_l_o_b_j manpage for more about objects.  (In a sense,
  28.        everything in Perl is an object, but we usually reserve
  29.        the word for references to objects that have been
  30.        officially "blessed" into a class package.)
  31.  
  32.        A symbolic reference contains the name of a variable, just
  33.        as a symbolic link in the filesystem merely contains the
  34.        name of a file.  The ****gggglllloooobbbb notation is a kind of symbolic
  35.        reference.  Hard references are more like hard links in
  36.        the file system: merely another way at getting at the same
  37.        underlying object, irrespective of its name.
  38.  
  39.        "Hard" references are easy to use in Perl.  There is just
  40.        one overriding principle:  Perl does no implicit
  41.        referencing or dereferencing.  When a scalar is holding a
  42.        reference, it always behaves as a scalar.  It doesn't
  43.        magically start being an array or a hash unless you tell
  44.        it so explicitly by dereferencing it.
  45.  
  46.        References can be constructed several ways.
  47.  
  48.        1.  By using the backslash operator on a variable,
  49.            subroutine, or value.  (This works much like the &
  50.            (address-of) operator works in C.)  Note that this
  51.            typically creates _A_N_O_T_H_E_R reference to a variable,
  52.            since there's already a reference to the variable in
  53.            the symbol table.  But the symbol table reference
  54.            might go away, and you'll still have the reference
  55.            that the backslash returned.  Here are some examples:
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64. 23/Jan/96                perl 5.002 with                        1
  65.  
  66.  
  67.  
  68.  
  69.  
  70. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  71.  
  72.  
  73.                $$$$ssssccccaaaallllaaaarrrrrrrreeeeffff ==== \\\\$$$$ffffoooooooo;;;;
  74.                $$$$aaaarrrrrrrraaaayyyyrrrreeeeffff  ==== \\\\@@@@AAAARRRRGGGGVVVV;;;;
  75.                $$$$hhhhaaaasssshhhhrrrreeeeffff   ==== \\\\%%%%EEEENNNNVVVV;;;;
  76.                $$$$ccccooooddddeeeerrrreeeeffff   ==== \\\\&&&&hhhhaaaannnnddddlllleeeerrrr;;;;
  77.                $$$$gggglllloooobbbbrrrreeeeffff   ==== \\\\****SSSSTTTTDDDDOOOOUUUUTTTT;;;;
  78.  
  79.  
  80.        2.  A reference to an anonymous array can be constructed
  81.            using square brackets:
  82.  
  83.                $$$$aaaarrrrrrrraaaayyyyrrrreeeeffff ==== [[[[1111,,,, 2222,,,, [[[[''''aaaa'''',,,, ''''bbbb'''',,,, ''''cccc'''']]]]]]]];;;;
  84.  
  85.            Here we've constructed a reference to an anonymous
  86.            array of three elements whose final element is itself
  87.            reference to another anonymous array of three
  88.            elements.  (The multidimensional syntax described
  89.            later can be used to access this.  For example, after
  90.            the above, $$$$aaaarrrrrrrraaaayyyyrrrreeeeffff->[2][1] would have the value
  91.            "b".)
  92.  
  93.            Note that taking a reference to an enumerated list is
  94.            not the same as using square brackets--instead it's
  95.            the same as creating a list of references!
  96.  
  97.                @@@@lllliiiisssstttt ==== ((((\\\\$$$$aaaa,,,, \\\\$$$$bbbb,,,, \\\\$$$$cccc))));;;;
  98.                @@@@lllliiiisssstttt ==== \\\\(((($$$$aaaa,,,, $$$$bbbb,,,, $$$$cccc))));;;;      #### ssssaaaammmmeeee tttthhhhiiiinnnngggg!!!!
  99.  
  100.  
  101.        3.  A reference to an anonymous hash can be constructed
  102.            using curly brackets:
  103.  
  104.                $$$$hhhhaaaasssshhhhrrrreeeeffff ==== {{{{
  105.                    ''''AAAAddddaaaammmm''''  ====>>>> ''''EEEEvvvveeee'''',,,,
  106.                    ''''CCCCllllyyyyddddeeee'''' ====>>>> ''''BBBBoooonnnnnnnniiiieeee'''',,,,
  107.                }}}};;;;
  108.  
  109.            Anonymous hash and array constructors can be
  110.            intermixed freely to produce as complicated a
  111.            structure as you want.  The multidimensional syntax
  112.            described below works for these too.  The values above
  113.            are literals, but variables and expressions would work
  114.            just as well, because assignment operators in Perl
  115.            (even within _l_o_c_a_l_(_) or _m_y_(_)) are executable
  116.            statements, not compile-time declarations.
  117.  
  118.            Because curly brackets (braces) are used for several
  119.            other things including BLOCKs, you may occasionally
  120.            have to disambiguate braces at the beginning of a
  121.            statement by putting a ++++ or a rrrreeeettttuuuurrrrnnnn in front so that
  122.            Perl realizes the opening brace isn't starting a
  123.            BLOCK.  The economy and mnemonic value of using
  124.            curlies is deemed worth this occasional extra hassle.
  125.  
  126.            For example, if you wanted a function to make a new
  127.  
  128.  
  129.  
  130. 23/Jan/96                perl 5.002 with                        2
  131.  
  132.  
  133.  
  134.  
  135.  
  136. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  137.  
  138.  
  139.            hash and return a reference to it, you have these
  140.            options:
  141.  
  142.                ssssuuuubbbb hhhhaaaasssshhhheeeemmmm {{{{        {{{{ @@@@____ }}}} }}}}   #### ssssiiiilllleeeennnnttttllllyyyy wwwwrrrroooonnnngggg
  143.                ssssuuuubbbb hhhhaaaasssshhhheeeemmmm {{{{       ++++{{{{ @@@@____ }}}} }}}}   #### ooookkkk
  144.                ssssuuuubbbb hhhhaaaasssshhhheeeemmmm {{{{ rrrreeeettttuuuurrrrnnnn {{{{ @@@@____ }}}} }}}}   #### ooookkkk
  145.  
  146.  
  147.        4.  A reference to an anonymous subroutine can be
  148.            constructed by using ssssuuuubbbb without a subname:
  149.  
  150.                $$$$ccccooooddddeeeerrrreeeeffff ==== ssssuuuubbbb {{{{ pppprrrriiiinnnntttt """"BBBBooooiiiinnnnkkkk!!!!\\\\nnnn"""" }}}};;;;
  151.  
  152.            Note the presence of the semicolon.  Except for the
  153.            fact that the code inside isn't executed immediately,
  154.            a ssssuuuubbbb {{{{}}}} is not so much a declaration as it is an
  155.            operator, like ddddoooo{{{{}}}} or eeeevvvvaaaallll{{{{}}}}.  (However, no matter
  156.            how many times you execute that line (unless you're in
  157.            an eeeevvvvaaaallll((((""""............""""))))), $$$$ccccooooddddeeeerrrreeeeffff will still have a reference
  158.            to the _S_A_M_E anonymous subroutine.)
  159.  
  160.            Anonymous subroutines act as closures with respect to
  161.            _m_y_(_) variables, that is, variables visible lexically
  162.            within the current scope.  Closure is a notion out of
  163.            the Lisp world that says if you define an anonymous
  164.            function in a particular lexical context, it pretends
  165.            to run in that context even when it's called outside
  166.            of the context.
  167.  
  168.            In human terms, it's a funny way of passing arguments
  169.            to a subroutine when you define it as well as when you
  170.            call it.  It's useful for setting up little bits of
  171.            code to run later, such as callbacks.  You can even do
  172.            object-oriented stuff with it, though Perl provides a
  173.            different mechanism to do that already--see the
  174.            _p_e_r_l_o_b_j manpage.
  175.  
  176.            You can also think of closure as a way to write a
  177.            subroutine template without using eval.  (In fact, in
  178.            version 5.000, eval was the _o_n_l_y way to get closures.
  179.            You may wish to use "require 5.001" if you use
  180.            closures.)
  181.  
  182.            Here's a small example of how closures works:
  183.  
  184.                ssssuuuubbbb nnnneeeewwwwpppprrrriiiinnnntttt {{{{
  185.                    mmmmyyyy $$$$xxxx ==== sssshhhhiiiifffftttt;;;;
  186.                    rrrreeeettttuuuurrrrnnnn ssssuuuubbbb {{{{ mmmmyyyy $$$$yyyy ==== sssshhhhiiiifffftttt;;;; pppprrrriiiinnnntttt """"$$$$xxxx,,,, $$$$yyyy!!!!\\\\nnnn"""";;;; }}}};;;;
  187.                }}}}
  188.                $$$$hhhh ==== nnnneeeewwwwpppprrrriiiinnnntttt((((""""HHHHoooowwwwddddyyyy""""))));;;;
  189.                $$$$gggg ==== nnnneeeewwwwpppprrrriiiinnnntttt((((""""GGGGrrrreeeeeeeettttiiiinnnnggggssss""""))));;;;
  190.  
  191.                #### TTTTiiiimmmmeeee ppppaaaasssssssseeeessss............
  192.  
  193.  
  194.  
  195.  
  196. 23/Jan/96                perl 5.002 with                        3
  197.  
  198.  
  199.  
  200.  
  201.  
  202. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  203.  
  204.  
  205.                &&&&$$$$hhhh((((""""wwwwoooorrrrlllldddd""""))));;;;
  206.                &&&&$$$$gggg((((""""eeeeaaaarrrrtttthhhhlllliiiinnnnggggssss""""))));;;;
  207.  
  208.            This prints
  209.  
  210.                HHHHoooowwwwddddyyyy,,,, wwwwoooorrrrlllldddd!!!!
  211.                GGGGrrrreeeeeeeettttiiiinnnnggggssss,,,, eeeeaaaarrrrtttthhhhlllliiiinnnnggggssss!!!!
  212.  
  213.            Note particularly that $$$$xxxx continues to refer to the
  214.            value passed into _n_e_w_p_r_i_n_t_(_) _d_e_s_p_i_t_e the fact that the
  215.            "my $$$$xxxx" has seemingly gone out of scope by the time
  216.            the anonymous subroutine runs.  That's what closure is
  217.            all about.
  218.  
  219.            This only applies to lexical variables, by the way.
  220.            Dynamic variables continue to work as they have always
  221.            worked.  Closure is not something that most Perl
  222.            programmers need trouble themselves about to begin
  223.            with.
  224.  
  225.        5.  References are often returned by special subroutines
  226.            called constructors.  Perl objects are just references
  227.            to a special kind of object that happens to know which
  228.            package it's associated with.  Constructors are just
  229.            special subroutines that know how to create that
  230.            association.  They do so by starting with an ordinary
  231.            reference, and it remains an ordinary reference even
  232.            while it's also being an object.  Constructors are
  233.            customarily named _n_e_w_(_), but don't have to be:
  234.  
  235.                $$$$oooobbbbjjjjrrrreeeeffff ==== nnnneeeewwww DDDDooooggggggggiiiieeee ((((TTTTaaaaiiiillll ====>>>> ''''sssshhhhoooorrrrtttt'''',,,, EEEEaaaarrrrssss ====>>>> ''''lllloooonnnngggg''''))));;;;
  236.  
  237.  
  238.        6.  References of the appropriate type can spring into
  239.            existence if you dereference them in a context that
  240.            assumes they exist.  Since we haven't talked about
  241.            dereferencing yet, we can't show you any examples yet.
  242.  
  243.        7.  References to filehandles can be created by taking a
  244.            reference to a typeglob.  This is currently the best
  245.            way to pass filehandles into or out of subroutines, or
  246.            to store them in larger data structures.
  247.  
  248.                sssspppplllluuuutttttttteeeerrrr((((\\\\****SSSSTTTTDDDDOOOOUUUUTTTT))));;;;
  249.                ssssuuuubbbb sssspppplllluuuutttttttteeeerrrr {{{{
  250.                    mmmmyyyy $$$$ffffhhhh ==== sssshhhhiiiifffftttt;;;;
  251.                    pppprrrriiiinnnntttt $$$$ffffhhhh """"hhhheeeerrrr uuuummmm wwwweeeellllllll aaaa hhhhmmmmmmmmmmmm\\\\nnnn"""";;;;
  252.                }}}}
  253.  
  254.                $$$$rrrreeeecccc ==== ggggeeeetttt____rrrreeeecccc((((\\\\****SSSSTTTTDDDDIIIINNNN))));;;;
  255.                ssssuuuubbbb ggggeeeetttt____rrrreeeecccc {{{{
  256.                    mmmmyyyy $$$$ffffhhhh ==== sssshhhhiiiifffftttt;;;;
  257.                    rrrreeeettttuuuurrrrnnnn ssssccccaaaallllaaaarrrr <<<<$$$$ffffhhhh>>>>;;;;
  258.                }}}}
  259.  
  260.  
  261.  
  262. 23/Jan/96                perl 5.002 with                        4
  263.  
  264.  
  265.  
  266.  
  267.  
  268. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  269.  
  270.  
  271.        That's it for creating references.  By now you're probably
  272.        dying to know how to use references to get back to your
  273.        long-lost data.  There are several basic methods.
  274.  
  275.        1.  Anywhere you'd put an identifier as part of a variable
  276.            or subroutine name, you can replace the identifier
  277.            with a simple scalar variable containing a reference
  278.            of the correct type:
  279.  
  280.                $$$$bbbbaaaarrrr ==== $$$$$$$$ssssccccaaaallllaaaarrrrrrrreeeeffff;;;;
  281.                ppppuuuusssshhhh((((@@@@$$$$aaaarrrrrrrraaaayyyyrrrreeeeffff,,,, $$$$ffffiiiilllleeeennnnaaaammmmeeee))));;;;
  282.                $$$$$$$$aaaarrrrrrrraaaayyyyrrrreeeeffff[[[[0000]]]] ==== """"JJJJaaaannnnuuuuaaaarrrryyyy"""";;;;
  283.                $$$$$$$$hhhhaaaasssshhhhrrrreeeeffff{{{{""""KKKKEEEEYYYY""""}}}} ==== """"VVVVAAAALLLLUUUUEEEE"""";;;;
  284.                &&&&$$$$ccccooooddddeeeerrrreeeeffff((((1111,,,,2222,,,,3333))));;;;
  285.                pppprrrriiiinnnntttt $$$$gggglllloooobbbbrrrreeeeffff """"oooouuuuttttppppuuuutttt\\\\nnnn"""";;;;
  286.  
  287.            It's important to understand that we are specifically
  288.            _N_O_T dereferencing $$$$aaaarrrrrrrraaaayyyyrrrreeeeffff[[[[0000]]]] or $$$$hhhhaaaasssshhhhrrrreeeeffff{{{{""""KKKKEEEEYYYY""""}}}}
  289.            there.  The dereference of the scalar variable happens
  290.            _B_E_F_O_R_E it does any key lookups.  Anything more
  291.            complicated than a simple scalar variable must use
  292.            methods 2 or 3 below.  However, a "simple scalar"
  293.            includes an identifier that itself uses method 1
  294.            recursively.  Therefore, the following prints "howdy".
  295.  
  296.                $$$$rrrreeeeffffrrrreeeeffffrrrreeeeffff ==== \\\\\\\\\\\\""""hhhhoooowwwwddddyyyy"""";;;;
  297.                pppprrrriiiinnnntttt $$$$$$$$$$$$$$$$rrrreeeeffffrrrreeeeffffrrrreeeeffff;;;;
  298.  
  299.  
  300.        2.  Anywhere you'd put an identifier as part of a variable
  301.            or subroutine name, you can replace the identifier
  302.            with a BLOCK returning a reference of the correct
  303.            type.  In other words, the previous examples could be
  304.            written like this:
  305.  
  306.                $$$$bbbbaaaarrrr ==== $$$${{{{$$$$ssssccccaaaallllaaaarrrrrrrreeeeffff}}}};;;;
  307.                ppppuuuusssshhhh((((@@@@{{{{$$$$aaaarrrrrrrraaaayyyyrrrreeeeffff}}}},,,, $$$$ffffiiiilllleeeennnnaaaammmmeeee))));;;;
  308.                $$$${{{{$$$$aaaarrrrrrrraaaayyyyrrrreeeeffff}}}}[[[[0000]]]] ==== """"JJJJaaaannnnuuuuaaaarrrryyyy"""";;;;
  309.                $$$${{{{$$$$hhhhaaaasssshhhhrrrreeeeffff}}}}{{{{""""KKKKEEEEYYYY""""}}}} ==== """"VVVVAAAALLLLUUUUEEEE"""";;;;
  310.                &&&&{{{{$$$$ccccooooddddeeeerrrreeeeffff}}}}((((1111,,,,2222,,,,3333))));;;;
  311.                $$$$gggglllloooobbbbrrrreeeeffff---->>>>pppprrrriiiinnnntttt((((""""oooouuuuttttppppuuuutttt\\\\nnnn""""))));;;;  #### iiiiffffffff yyyyoooouuuu uuuusssseeee FFFFiiiilllleeeeHHHHaaaannnnddddlllleeee
  312.  
  313.            Admittedly, it's a little silly to use the curlies in
  314.            this case, but the BLOCK can contain any arbitrary
  315.            expression, in particular, subscripted expressions:
  316.  
  317.                &&&&{{{{ $$$$ddddiiiissssppppaaaattttcccchhhh{{{{$$$$iiiinnnnddddeeeexxxx}}}} }}}}((((1111,,,,2222,,,,3333))));;;;      #### ccccaaaallllllll ccccoooorrrrrrrreeeecccctttt rrrroooouuuuttttiiiinnnneeee
  318.  
  319.            Because of being able to omit the curlies for the
  320.            simple case of $$$$$$$$xxxx, people often make the mistake of
  321.            viewing the dereferencing symbols as proper operators,
  322.            and wonder about their precedence.  If they were,
  323.            though, you could use parens instead of braces.
  324.            That's not the case.  Consider the difference below;
  325.  
  326.  
  327.  
  328. 23/Jan/96                perl 5.002 with                        5
  329.  
  330.  
  331.  
  332.  
  333.  
  334. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  335.  
  336.  
  337.            case 0 is a short-hand version of case 1, _N_O_T case 2:
  338.  
  339.                $$$$$$$$hhhhaaaasssshhhhrrrreeeeffff{{{{""""KKKKEEEEYYYY""""}}}}   ==== """"VVVVAAAALLLLUUUUEEEE"""";;;;       #### CCCCAAAASSSSEEEE 0000
  340.                $$$${{{{$$$$hhhhaaaasssshhhhrrrreeeeffff}}}}{{{{""""KKKKEEEEYYYY""""}}}} ==== """"VVVVAAAALLLLUUUUEEEE"""";;;;       #### CCCCAAAASSSSEEEE 1111
  341.                $$$${{{{$$$$hhhhaaaasssshhhhrrrreeeeffff{{{{""""KKKKEEEEYYYY""""}}}}}}}} ==== """"VVVVAAAALLLLUUUUEEEE"""";;;;       #### CCCCAAAASSSSEEEE 2222
  342.                $$$${{{{$$$$hhhhaaaasssshhhhrrrreeeeffff---->>>>{{{{""""KKKKEEEEYYYY""""}}}}}}}} ==== """"VVVVAAAALLLLUUUUEEEE"""";;;;     #### CCCCAAAASSSSEEEE 3333
  343.  
  344.            Case 2 is also deceptive in that you're accessing a
  345.            variable called %%%%hhhhaaaasssshhhhrrrreeeeffff, not dereferencing through
  346.            $$$$hhhhaaaasssshhhhrrrreeeeffff to the hash it's presumably referencing.
  347.            That would be case 3.
  348.  
  349.        3.  The case of individual array elements arises often
  350.            enough that it gets cumbersome to use method 2.  As a
  351.            form of syntactic sugar, the two lines like that above
  352.            can be written:
  353.  
  354.                $$$$aaaarrrrrrrraaaayyyyrrrreeeeffff---->>>>[[[[0000]]]] ==== """"JJJJaaaannnnuuuuaaaarrrryyyy"""";;;;
  355.                $$$$hhhhaaaasssshhhhrrrreeeeffff---->>>>{{{{""""KKKKEEEEYYYY""""}}}} ==== """"VVVVAAAALLLLUUUUEEEE"""";;;;
  356.  
  357.            The left side of the array can be any expression
  358.            returning a reference, including a previous
  359.            dereference.  Note that $$$$aaaarrrrrrrraaaayyyy[[[[$$$$xxxx]]]] is _N_O_T the same
  360.            thing as $$$$aaaarrrrrrrraaaayyyy---->>>>[[[[$$$$xxxx]]]] here:
  361.  
  362.                $$$$aaaarrrrrrrraaaayyyy[[[[$$$$xxxx]]]]---->>>>{{{{""""ffffoooooooo""""}}}}---->>>>[[[[0000]]]] ==== """"JJJJaaaannnnuuuuaaaarrrryyyy"""";;;;
  363.  
  364.            This is one of the cases we mentioned earlier in which
  365.            references could spring into existence when in an
  366.            lvalue context.  Before this statement, $$$$aaaarrrrrrrraaaayyyy[[[[$$$$xxxx]]]] may
  367.            have been undefined.  If so, it's automatically
  368.            defined with a hash reference so that we can look up
  369.            {{{{""""ffffoooooooo""""}}}} in it.  Likewise $$$$aaaarrrrrrrraaaayyyy[[[[$$$$xxxx]]]]---->>>>{{{{""""ffffoooooooo""""}}}} will
  370.            automatically get defined with an array reference so
  371.            that we can look up [[[[0000]]]] in it.
  372.  
  373.            One more thing here.  The arrow is optional _B_E_T_W_E_E_N
  374.            brackets subscripts, so you can shrink the above down
  375.            to
  376.  
  377.                $$$$aaaarrrrrrrraaaayyyy[[[[$$$$xxxx]]]]{{{{""""ffffoooooooo""""}}}}[[[[0000]]]] ==== """"JJJJaaaannnnuuuuaaaarrrryyyy"""";;;;
  378.  
  379.            Which, in the degenerate case of using only ordinary
  380.            arrays, gives you multidimensional arrays just like
  381.            C's:
  382.  
  383.                $$$$ssssccccoooorrrreeee[[[[$$$$xxxx]]]][[[[$$$$yyyy]]]][[[[$$$$zzzz]]]] ++++==== 44442222;;;;
  384.  
  385.            Well, okay, not entirely like C's arrays, actually.  C
  386.            doesn't know how to grow its arrays on demand.  Perl
  387.            does.
  388.  
  389.        4.  If a reference happens to be a reference to an object,
  390.            then there are probably methods to access the things
  391.  
  392.  
  393.  
  394. 23/Jan/96                perl 5.002 with                        6
  395.  
  396.  
  397.  
  398.  
  399.  
  400. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  401.  
  402.  
  403.            referred to, and you should probably stick to those
  404.            methods unless you're in the class package that
  405.            defines the object's methods.  In other words, be
  406.            nice, and don't violate the object's encapsulation
  407.            without a very good reason.  Perl does not enforce
  408.            encapsulation.  We are not totalitarians here.  We do
  409.            expect some basic civility though.
  410.  
  411.        The _r_e_f_(_) operator may be used to determine what type of
  412.        thing the reference is pointing to.  See the _p_e_r_l_f_u_n_c
  413.        manpage.
  414.  
  415.        The _b_l_e_s_s_(_) operator may be used to associate a reference
  416.        with a package functioning as an object class.  See the
  417.        _p_e_r_l_o_b_j manpage.
  418.  
  419.        A typeglob may be dereferenced the same way a reference
  420.        can, since the dereference syntax always indicates the
  421.        kind of reference desired.  So $$$${{{{****ffffoooooooo}}}} and $$$${{{{\\\\$$$$ffffoooooooo}}}} both
  422.        indicate the same scalar variable.
  423.  
  424.        Here's a trick for interpolating a subroutine call into a
  425.        string:
  426.  
  427.            pppprrrriiiinnnntttt """"MMMMyyyy ssssuuuubbbb rrrreeeettttuuuurrrrnnnneeeedddd @@@@{{{{[[[[mmmmyyyyssssuuuubbbb((((1111,,,,2222,,,,3333))))]]]]}}}} tttthhhhaaaatttt ttttiiiimmmmeeee....\\\\nnnn"""";;;;
  428.  
  429.        The way it works is that when the @@@@{{{{............}}}} is seen in the
  430.        double-quoted string, it's evaluated as a block.  The
  431.        block creates a reference to an anonymous array containing
  432.        the results of the call to mmmmyyyyssssuuuubbbb((((1111,,,,2222,,,,3333)))).  So the whole
  433.        block returns a reference to an array, which is then
  434.        dereferenced by @@@@{{{{............}}}} and stuck into the double-quoted
  435.        string. This chicanery is also useful for arbitrary
  436.        expressions:
  437.  
  438.            pppprrrriiiinnnntttt """"TTTThhhhaaaatttt yyyyeeeeiiiillllddddssss @@@@{{{{[[[[$$$$nnnn ++++ 5555]]]]}}}} wwwwiiiiddddggggeeeettttssss\\\\nnnn"""";;;;
  439.  
  440.  
  441.        SSSSyyyymmmmbbbboooolllliiiicccc rrrreeeeffffeeeerrrreeeennnncccceeeessss
  442.  
  443.        We said that references spring into existence as necessary
  444.        if they are undefined, but we didn't say what happens if a
  445.        value used as a reference is already defined, but _I_S_N_'_T a
  446.        hard reference.  If you use it as a reference in this
  447.        case, it'll be treated as a symbolic reference.  That is,
  448.        the value of the scalar is taken to be the _N_A_M_E of a
  449.        variable, rather than a direct link to a (possibly)
  450.        anonymous value.
  451.  
  452.        People frequently expect it to work like this.  So it
  453.        does.
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460. 23/Jan/96                perl 5.002 with                        7
  461.  
  462.  
  463.  
  464.  
  465.  
  466. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  467.  
  468.  
  469.            $$$$nnnnaaaammmmeeee ==== """"ffffoooooooo"""";;;;
  470.            $$$$$$$$nnnnaaaammmmeeee ==== 1111;;;;                 #### SSSSeeeettttssss $$$$ffffoooooooo
  471.            $$$${{{{$$$$nnnnaaaammmmeeee}}}} ==== 2222;;;;               #### SSSSeeeettttssss $$$$ffffoooooooo
  472.            $$$${{{{$$$$nnnnaaaammmmeeee xxxx 2222}}}} ==== 3333;;;;           #### SSSSeeeettttssss $$$$ffffooooooooffffoooooooo
  473.            $$$$nnnnaaaammmmeeee---->>>>[[[[0000]]]] ==== 4444;;;;             #### SSSSeeeettttssss $$$$ffffoooooooo[[[[0000]]]]
  474.            @@@@$$$$nnnnaaaammmmeeee ==== (((())));;;;                #### CCCClllleeeeaaaarrrrssss @@@@ffffoooooooo
  475.            &&&&$$$$nnnnaaaammmmeeee(((())));;;;                   #### CCCCaaaallllllllssss &&&&ffffoooooooo(((()))) ((((aaaassss iiiinnnn PPPPeeeerrrrllll 4444))))
  476.            $$$$ppppaaaacccckkkk ==== """"TTTTHHHHAAAATTTT"""";;;;
  477.            $$$${{{{""""$$$${{{{ppppaaaacccckkkk}}}}::::::::$$$$nnnnaaaammmmeeee""""}}}} ==== 5555;;;;    #### SSSSeeeettttssss $$$$TTTTHHHHAAAATTTT::::::::ffffoooooooo wwwwiiiitttthhhhoooouuuutttt eeeevvvvaaaallll
  478.  
  479.        This is very powerful, and slightly dangerous, in that
  480.        it's possible to intend (with the utmost sincerity) to use
  481.        a hard reference, and accidentally use a symbolic
  482.        reference instead.  To protect against that, you can say
  483.  
  484.            uuuusssseeee ssssttttrrrriiiicccctttt ''''rrrreeeeffffssss'''';;;;
  485.  
  486.        and then only hard references will be allowed for the rest
  487.        of the enclosing block.  An inner block may countermand
  488.        that with
  489.  
  490.            nnnnoooo ssssttttrrrriiiicccctttt ''''rrrreeeeffffssss'''';;;;
  491.  
  492.        Only package variables are visible to symbolic references.
  493.        Lexical variables (declared with _m_y_(_)) aren't in a symbol
  494.        table, and thus are invisible to this mechanism.  For
  495.        example:
  496.  
  497.            llllooooccccaaaallll(((($$$$vvvvaaaalllluuuueeee)))) ==== 11110000;;;;
  498.            $$$$rrrreeeeffff ==== \\\\$$$$vvvvaaaalllluuuueeee;;;;
  499.            {{{{
  500.                mmmmyyyy $$$$vvvvaaaalllluuuueeee ==== 22220000;;;;
  501.                pppprrrriiiinnnntttt $$$$$$$$rrrreeeeffff;;;;
  502.            }}}}
  503.  
  504.        This will still print 10, not 20.  Remember that _l_o_c_a_l_(_)
  505.        affects package variables, which are all "global" to the
  506.        package.
  507.  
  508.        NNNNooootttt----ssssoooo----ssssyyyymmmmbbbboooolllliiiicccc rrrreeeeffffeeeerrrreeeennnncccceeeessss
  509.  
  510.        A new feature contributing to readability in 5.001 is that
  511.        the brackets around a symbolic reference behave more like
  512.        quotes, just as they always have within a string.  That
  513.        is,
  514.  
  515.            $$$$ppppuuuusssshhhh ==== """"ppppoooopppp oooonnnn """";;;;
  516.            pppprrrriiiinnnntttt """"$$$${{{{ppppuuuusssshhhh}}}}oooovvvveeeerrrr"""";;;;
  517.  
  518.        has always meant to print "pop on over", despite the fact
  519.        that push is a reserved word.  This has been generalized
  520.        to work the same outside of quotes, so that
  521.  
  522.            pppprrrriiiinnnntttt $$$${{{{ppppuuuusssshhhh}}}} .... """"oooovvvveeeerrrr"""";;;;
  523.  
  524.  
  525.  
  526. 23/Jan/96                perl 5.002 with                        8
  527.  
  528.  
  529.  
  530.  
  531.  
  532. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  533.  
  534.  
  535.        and even
  536.  
  537.            pppprrrriiiinnnntttt $$$${{{{ ppppuuuusssshhhh }}}} .... """"oooovvvveeeerrrr"""";;;;
  538.  
  539.        will have the same effect.  (This would have been a syntax
  540.        error in 5.000, though Perl 4 allowed it in the spaceless
  541.        form.)  Note that this construct is _n_o_t considered to be a
  542.        symbolic reference when you're using strict refs:
  543.  
  544.            uuuusssseeee ssssttttrrrriiiicccctttt ''''rrrreeeeffffssss'''';;;;
  545.            $$$${{{{ bbbbaaaarrrreeeewwwwoooorrrrdddd }}}};;;;      #### OOOOkkkkaaaayyyy,,,, mmmmeeeeaaaannnnssss $$$$bbbbaaaarrrreeeewwwwoooorrrrdddd....
  546.            $$$${{{{ """"bbbbaaaarrrreeeewwwwoooorrrrdddd"""" }}}};;;;    #### EEEErrrrrrrroooorrrr,,,, ssssyyyymmmmbbbboooolllliiiicccc rrrreeeeffffeeeerrrreeeennnncccceeee....
  547.  
  548.        Similarly, because of all the subscripting that is done
  549.        using single words, we've applied the same rule to any
  550.        bareword that is used for subscripting a hash.  So now,
  551.        instead of writing
  552.  
  553.            $$$$aaaarrrrrrrraaaayyyy{{{{ """"aaaaaaaaaaaa"""" }}}}{{{{ """"bbbbbbbbbbbb"""" }}}}{{{{ """"cccccccccccc"""" }}}}
  554.  
  555.        you can just write
  556.  
  557.            $$$$aaaarrrrrrrraaaayyyy{{{{ aaaaaaaaaaaa }}}}{{{{ bbbbbbbbbbbb }}}}{{{{ cccccccccccc }}}}
  558.  
  559.        and not worry about whether the subscripts are reserved
  560.        words.  In the rare event that you do wish to do something
  561.        like
  562.  
  563.            $$$$aaaarrrrrrrraaaayyyy{{{{ sssshhhhiiiifffftttt }}}}
  564.  
  565.        you can force interpretation as a reserved word by adding
  566.        anything that makes it more than a bareword:
  567.  
  568.            $$$$aaaarrrrrrrraaaayyyy{{{{ sssshhhhiiiifffftttt(((()))) }}}}
  569.            $$$$aaaarrrrrrrraaaayyyy{{{{ ++++sssshhhhiiiifffftttt }}}}
  570.            $$$$aaaarrrrrrrraaaayyyy{{{{ sssshhhhiiiifffftttt @@@@____ }}}}
  571.  
  572.        The ----wwww switch will warn you if it interprets a reserved
  573.        word as a string.  But it will no longer warn you about
  574.        using lowercase words, since the string is effectively
  575.        quoted.
  576.  
  577. WWWWAAAARRRRNNNNIIIINNNNGGGG
  578.        You may not (usefully) use a reference as the key to a
  579.        hash.  It will be converted into a string:
  580.  
  581.            $$$$xxxx{{{{ \\\\$$$$aaaa }}}} ==== $$$$aaaa;;;;
  582.  
  583.        If you try to dereference the key, it won't do a hard
  584.        dereference, and you won't accomplish what you're
  585.        attemping.  You might want to do something more like
  586.  
  587.            $$$$rrrr ==== \\\\@@@@aaaa;;;;
  588.            $$$$xxxx{{{{ $$$$rrrr }}}} ==== $$$$rrrr;;;;
  589.  
  590.  
  591.  
  592. 23/Jan/96                perl 5.002 with                        9
  593.  
  594.  
  595.  
  596.  
  597.  
  598. PERLREF(1)     User Contributed Perl Documentation     PERLREF(1)
  599.  
  600.  
  601.        And then at least you can use the _v_a_l_u_e_s_(_), which will be
  602.        real refs, instead of the _k_e_y_s_(_), which won't.
  603.  
  604. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  605.        Besides the obvious documents, source code can be
  606.        instructive.  Some rather pathological examples of the use
  607.        of references can be found in the _t_/_o_p_/_r_e_f_._t regression
  608.        test in the Perl source directory.
  609.  
  610.        See also the _p_e_r_l_d_s_c manpage and the _p_e_r_l_l_o_l manpage for
  611.        how to use references to create complex data structures,
  612.        and the _p_e_r_l_o_b_j manpage for how to use them to create
  613.        objects.
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658. 23/Jan/96                perl 5.002 with                       10
  659.  
  660.  
  661.