Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to export a reference to a hash but can only access it with a fully-qualified name. What am I doing wrong? Thanks

Package Foo; use strict; use warnings; use Exporter 'import'; our @ISA = qw[Exporter]; our @EXPORT_OK = qw[%env $env]; our %env = %ENV; our $env = \%ENV; 1;

perl -I. -MFoo=%env -le 'print scalar keys %env'
38

perl -I. -MFoo=$env -le 'print scalar keys %$env'
0

perl -I. -MFoo=$env -le 'print scalar keys %$Foo::env'
38

Replies are listed 'Best First'.
Re: How to export hash references
by hippo (Chancellor) on Feb 14, 2020 at 07:05 UTC
    Package Foo;

    This isn't valid. In Perl, package is all in lowercase.

    Your actual problem (once that's fixed) is that you are not escaping the dollar symbol.

    $ perl -I. -MFoo=$env -le 'print scalar keys %$env' 0 $ perl -I. -MFoo=\$env -le 'print scalar keys %$env' 76
      Thanks hippo. That Package thing was a dumb typo, good catch. I'm so used to importing arrays and hashes, without having to escape the sigil, that I forgot about the pesky $hell. Thank you!