Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^3: How to import "global" variables into sub-scripts from main script?

by AnomalousMonk (Archbishop)
on Mar 22, 2021 at 10:46 UTC ( [id://11130099]=note: print w/replies, xml ) Need Help??


in reply to Re^2: How to import "global" variables into sub-scripts from main script?
in thread How to import "global" variables into sub-scripts from main script?

I don't have a script named "main".

main is the default package if no package statement has declared any other.

I have no idea what perl would think if I tried $main::DEBUG.

This is the "fully qualified" form of a package-global name. It is always valid. Even under strict, fully-qualified package globals can always be accessed with or without pre-declaration. Some examples:

Win8 Strawberry 5.30.3.1 (64) Mon 03/22/2021 6:33:58 C:\@Work\Perl\monks >perl use strict; use warnings; package Bar { # package-globals can always be accessed in fully-qualified form $main::foo = "hi, i'm assigning this in " . __PACKAGE__ . "\n"; } print "A: this is being printed from default package ", __PACKAGE__, " +\n"; # global $foo not yet declared in main: must access fully-qualified print "B: i'm accessing this from ", __PACKAGE__, ": $main::foo"; our $foo; # declare global $foo in package main print "C: i'm accessing this from ", __PACKAGE__, ": $foo"; ^Z A: this is being printed from default package main B: i'm accessing this from main: hi, i'm assigning this in Bar C: i'm accessing this from main: hi, i'm assigning this in Bar


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

Replies are listed 'Best First'.
Re^4: How to import "global" variables into sub-scripts from main script?
by Polyglot (Chaplain) on Mar 22, 2021 at 11:09 UTC

    Keep in mind that I have only one file among all of them which uses the shebang line--just the main script. These attached files are not designed to be independent, and could probably work just as well given a ".txt" suffix. Though I have put ".pl" as their suffix, I do not set their executable bits on the server, i.e. they are chmod 640 instead of 755 (running on linux). Furthermore, they basically return true immediately, without executing anything. All they do is provide space for me to organize my various subroutines.

    Taken together, they average over 850 lines per file. I'd like to bring that down further, as anything over about 600 lines begins to get unwieldy for me and I have a harder time finding things or remembering where to look for them. I never realized that perl wants to be an all-in-one-big-file script, with no way to share global variables!

    Again, I'm not writing or using packages. I'm just spreading out my script into multiple files for organizational purposes.

    Next, I suppose, I'll have to write a separate script that combines all of my individual files into a single file on the server prior to run-time. Sigh. Wow. I can't believe this. I always imagined Perl to be more capable--this seems such a simple thing to be able to do, not even a majorly complex problem.

    Blessings,

    ~Polyglot~

      ... this seems such a simple thing to be able to do, not even a majorly complex problem.

      It is simple, but there's nothing so simple that it cannot be made more complex. :)

      IIUC, you're not using package anywhere, so all your code is in the default main package. But for some reason you can't use the fully-qualified $main::variable_name (with $ replaced by the appropriate sigil) form to access globals, nor can you use
          our $variable_name;
      statements to declare variables within the file-scopes of the various source files of your application.

      I think you're right: avoid strict and warnings like the plague, and use the unqualified form for all globals. If nothing else, it will be employment insurance.


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

Log In?
Username:
Password:

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

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

    No recent polls found