http://www.perlmonks.org?node_id=942184


in reply to Config::Config{osname} and Config{osname}

%Config::Config like @Config::ISA lives in package Config; while %Config lives in package main;

When you use Config; it exports %Config into your current package (main). If you use package Huang; use Config; it exports (creates) %Config in package Huang; The fully qualified name of this exported (created) %Config is %Huang::Config;

It is a global variable.

This "exporting" is a copy. Copies take memory. So if you use Config(); or require Config; no copy gets made in your current namespace, but you can still access the original by its full name %Config::Config;

Read Tutorials: Variable Scoping in Perl: the basics, Coping with Scoping

Replies are listed 'Best First'.
Re^2: Config::Config{osname} and Config{osname}
by Anonymous Monk on Dec 07, 2011 at 09:14 UTC

    This "exporting" is a copy. Copies take memory.

    Actually, it only copies a reference, not a lot of memory

    perl -MConfig -le " print \%Config::Config; print \%Config; " HASH(0x99abe4) HASH(0x99abe4)
Re^2: Config::Config{osname} and Config{osname}
by PhillipHuang (Beadle) on Dec 07, 2011 at 09:43 UTC
    I see. When 'use Config' first, and then in 'package Huang', it must be identified with original path as "$Config::Config". If use '$Config{osname}', it will warn 'Global symbol "%Config" requires explicit package'.

      Yup, it all depends what package you're in

      $ perl -l use strict; use warnings; use Config; # main package Huang; use Config; package Batman; use Config; package main; print \%Config; print \%Huang::Config; print \%Batman::Config; print \%main::Config; print \%Config::Config; __END__ HASH(0x99abcc) HASH(0x99abcc) HASH(0x99abcc) HASH(0x99abcc) HASH(0x99abcc)