Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

help with Exporter

by why_bird (Pilgrim)
on Feb 28, 2008 at 09:09 UTC ( [id://670855]=perlquestion: print w/replies, xml ) Need Help??

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

Hey all, I'm having some difficulty with Exporter. I would prefer to use the Readonly module instead, but I don't have admin permissions which I would need to install it at work.

I want to declare some constants in a header-type file, and then use them in lots of other scripts. So far, I have in 'definitions.pm':

#! /usr/bin/perl package definitions; require Exporter; @ISA= qw(Exporter); use strict; use warnings; ###################################### ## definitions so that if constants ## ## change or are wrong, they can be ## ## easily updated ## @EXPORT=qw(CONST CONST2); use constant CONST => 2; use constant CONST2 => 3; 1;
That was basically copied from the Exporter documentation. In 'temp.pl' i have:
#! /usr/bin/perl use strict; use warnings; use Data::Dumper; use definitions; print Dumper CONST; print Dumper "CONST"; print CONST exit 0;

so firstly, when I call temp.pl I get: "Global symbol "@EXPORT" requires explicit package name at definitions.pm line 16" so I try adding 'my' before @EXPORT: "Bareword "CONST" not allowed while "strict subs" in use at ./temp.pl line 10." so I try 'our' and get the same error, then i try 'use Exporter' rather than 'require': same results as above.

If I just run 'definitions.pm' using my @EXPORT, it will at least print '2'. but that's as far as I can get. bah. any suggestions?

Replies are listed 'Best First'.
Re: help with Exporter
by ikegami (Patriarch) on Feb 28, 2008 at 09:11 UTC

    our @EXPORT or use vars qw( @EXPORT );. Same for @ISA.

    By the way, no special privileges are needed to install modules. They can be installed in a directory where you have permission.

      I can't un-tar the module I want. It says I don't have the right permissions. Thanks though, I'll have another go.
Re: help with Exporter
by moritz (Cardinal) on Feb 28, 2008 at 09:15 UTC
    BTW the same applies for @ISA - it should be declared with our. But since that is after you use strict;, perl won't complain.

    Another way is thise: use base Exporter, or don't inherit from Exporter at all:

    use Exporter qw(import);

      Ok, I tried this:

      snippet:

      ... ## easily updated ## our @ISA= qw(Exporter); our @EXPORT=qw($NPR_TO_DAC $NPR_TO_ADC); use constant CONST => 2; ...

      but I still got Bareword "CONST" not allowed while "strict subs" in use at ./temp.pl line 10.

      So I removed @ISA, and tried use base 'Exporter' instead:

      #! /usr/bin/perl package definitions; require Exporter; use base 'Exporter'; use strict; use warnings; ################# ## definitions ## our @EXPORT=qw($NPR_TO_DAC $NPR_TO_ADC); use constant CONST => 2; use constant CONST2 => 3; print CONST; 1;

      this gave the same Bareword error.
      I think half the problem is that I don't really understand what Exporter is doing or how it works... I have read the documentation, but I'm still somewhat new at this..!
      Thankyou for your help so far---any further tips?

        I tried your second snippet (copied and pasted to a new script), and it runs!

        I have a perl 5.8.8, what's your perl version? And are you sure you tried exactly the same script as you posted here?

Re: help with Exporter
by ferreira (Chaplain) on Feb 28, 2008 at 23:00 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://670855]
Approved by moritz
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (6)
As of 2024-04-24 09:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found