There's a distinction between %main:: (the symbol table of the main package, i.e., namespace) and the two hashes %main and %main::main (which are two different ways of naming the same hash!) in the main package.

c:\@Work\Perl\monks>perl -w -le "use v5.10; say X; say $main::{X}; if(exists $main::{X} ){ say 'A: exists';} else {say 'A: does not e +xist';} if(exists $main{X} ){ say 'B: exists';} else {say 'B: does not e +xist';} if(exists $main::main{X}){ say 'C: exists';} else {say 'C: does not e +xist';} die 'not the same' if \%main != \%main::main; die 'are the same' if \%main == \%main::; if( defined(X) ){say 'defined';} else {say 'not defined';} " say() on unopened filehandle X at -e line 1. *main::X A: exists B: does not exist C: does not exist defined
(Note: warnings are enabled, strictures disabled.)

The statement say X; creates an unopened filehandle X in the main package which exists and is defined, although useless. The hash elements $main{X} and $main::main{X} (again, two different names for the same thing) do not exist and are not defined.

Update 1: A few minor wording changes.

Update 2: The difference and equivalence among the two separate hashes running around in this example code can be highlighted by inserting the
    say ' \%main:: ', \%main::, ' \%main ', \%main, ' \%main::main ', \%main::main;
statement just before the two die statements. Note that autovivification is at work to bring the latter two hashes | hash with two names into existence.


Give a man a fish:  <%-{-{-{-<


In reply to Re^5: Two meanings of undef (updated) by AnomalousMonk
in thread Two meanings of undef by likbez

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.