in reply to MCE seemingly stray array in sample code for Strassen's algorithm

G'day cormanaz,

@p is a global variable visible to all the subroutines (i.e. in scope). It's used in strassen() as well as store_result() (as you pointed out).

Here's a simplified example of what you're seeing. Both subroutines have access to the global array @nums:

$ perl -Mstrict -Mwarnings -E ' say "Hello, world!"; populate_nums(); report_nums(); my @nums; sub populate_nums { push @nums => 0 .. 9 } sub report_nums { say "@nums" } ' Hello, world! 0 1 2 3 4 5 6 7 8 9

Here, only populate_nums() has access:

$ perl -Mstrict -Mwarnings -E ' say "Hello, world!"; populate_nums(); report_nums(); my @nums; sub populate_nums { push @nums => 0 .. 9 } sub report_nums { my @nums; say "@nums" } ' Hello, world!

Perhaps take a look at perlintro - Variable scoping; and follow-up with perlsub - Private Variables via my().

-- Ken

Replies are listed 'Best First'.
Re^2: MCE seemingly stray array in sample code for Strassen's algorithm
by BillKSmith (Monsignor) on Apr 14, 2013 at 02:33 UTC
    Your use of the word "global" is truly discriptive, but I believe that perl documentation reserves it for package variables. A possible alternative is "file scope variable".

    Example: The description of "our" in perlfunc contains the following quote.

    our associates a simple name with a package (read: global) variable in the current package,...
    Bill
      "File scope" is also potentially incorrect - if the code has several nested blocks in the file, only those declared in the outer-most block could be considered to be "File scope".

      The correct terminology is "lexical scope".

      From "perldoc -f my" :
      .... local (lexically) to the enclosing block, file, or "eval".

      In this case, the subroutine is accessing a variable declared in an enclosing block.
      I suppose this could be considered "global to the subroutine".

                   "I'm fairly sure if they took porn off the Internet, there'd only be one website left, and it'd be called 'Bring Back the Porn!'"
              -- Dr. Cox, Scrubs

Re^2: MCE seemingly stray array in sample code for Strassen's algorithm
by cormanaz (Deacon) on Apr 14, 2013 at 12:09 UTC
    Well blow me down. I have thought all these years that a variable declared "my" in the main block was only accessible in the main block and not in its subs, and that to make it accessible you had to declare it "our." I guess not!
      Hi all,

      The @p array in question, by the OP, is updated by the MCE manager process only and not by the workers themselves. The $self->do(...) method sends data to the manager process.