in reply to Writing Modules

I know I got the module name right.

Which module name? Your package is named here:

package pack;

You're invoking it with:

use mine::package;

When you get your package's name as declared with package to match the name as requested via use, and into a path within your Perl's /lib/* hierarchy that matches the name, you will find it works better.

You wouldn't say "my $this = 5;", and then "say $that;". It's a similar principle.

The next step will be in either using the fully qualified name of $thing, or exporting the variable into your caller's name-space. See perlmod, and Exporter.

Also, by general convention people usually give their modules names where the first character of each word is capitalized, as in Quantum::Superpositions, or List::Util. (but not always...). The convention is that all-lower-cased names are used for pragmas such as strict, warnings, and others.


Dave

Replies are listed 'Best First'.
Re^2: Writing Modules
by perl.j (Pilgrim) on Aug 23, 2011 at 14:07 UTC

    I seem to still be stuck. Hear is my "module" now:

    package pack; use Exporter; @EXPORT = "$thing"; our $thing = "thing"; 1;

    And here is my program:

    use mine::package qw($thing); print "hello $thing";

    My output ends up being hello instead of hello thing. Thanks for the help.

    --perl.j

      If you turn on strict in your calling script, you'll get more information on what's going on. Basically though, you still haven't addressed this issue:

      Which module name? Your package is named here:
      package pack;
      You're invoking it with:
      use mine::package;

      The others have already gone into what needs to be resolved to fix that. I'd recommend re-reading their replies and follow their suggested references and read those too. It's all there, it's just not necessarily spelled out for you directly.

      EDIT: On second look, you've introduced a couple more issues as well with your changes. You should definitely turn strict back on in your package, as well as adding it to your test program. Turn on warnings everywhere as well. They will point out very clear issues, but the perl errors and warnings won't necessarily make perfect sense unless you know what exactly they're talking about. For that you definitely need to read those references.

      --Dave

        I turned on strict and warnings. It is saying (in my test program)
        Global symbol "$thing" requires explicit package name at C:\myperl\Per +lJunk\mo.p l line 3.
        . I know what that means but I already said our $thing in my "module". I am really confused...
        --perl.j