On 09/13/2017 10:48 PM, Brandon Allbery wrote:
On Thu, Sep 14, 2017 at 1:42 AM, ToddAndMargo <toddandma...@zoho.com <mailto:toddandma...@zoho.com>> wrote:

    On 09/13/2017 10:26 PM, Brandon Allbery wrote:

        On Thu, Sep 14, 2017 at 12:46 AM, ToddAndMargo
        <toddandma...@zoho.com <mailto:toddandma...@zoho.com>
        <mailto:toddandma...@zoho.com <mailto:toddandma...@zoho.com>>>
        wrote:

             What is the Perl6 equivalent of the perl 5 "::"?

             $Found = CheckSystemDependancy::Which ( $ProgramName,
        $HowToExit );


        It's the same... but unlike Perl 5, there is a difference
        between subs and methods, and subs are lexical by default (that
        is, they behave as if defined "my sub ..." --- which syntax is
        legal in Perl 6 (and I think in sufficiently recent perl 5 if
        you specify a minimum version in your script)). For a sub to be
        callable that way, it must explicitly be defined as "our sub ...".

        Although you will run into another issue because you have
        whitespace before the "(", so it will be called with one
        parameter that is a 2-element list.


    8:  use CheckSystemDependancy; # qw[ Which ];
    35: #$Found = Which( $ProgramName, $HowToExit );
    36: $Found = CheckSystemDependancy::Which( $ProgramName, $HowToExit );

    $ CheckSystemDependancy.pl6 ls live
    Could not find symbol '&Which'
       in block <unit> at ./CheckSystemDependancy.pl6 line 36

    Line 35 works, but line 36 does not.


Okay, I guess I have to figure out how to rephrase my explanation.

If you do 'use CheckSystemDependency qw[ Which ]' then you are asking for the bare name 'Which' to be imported into your local module's namespace. Only this bare name is imported, and only into your module.

You missed the comment mark
use CheckSystemDependancy; # qw[ Which ];
---------------------------^

Does that change your analysis?


If you want to use the other way, the CheckSystemDependency module MUST define Which as: our sub Which ... If it is not explicitly declared "our", then it is declared "my" and the only way the name can be seen outside the CheckSystemDependency module is for it to be exported and for your module to import it.

You cannot simply call any sub you see in a different module. If it is not explicitly declared "our" then you cannot access it; it is declared locally to that module and cannot be seen anywhere else.

I am confused.  `CheckSystemDependancy::Which` does not work in P6?

I am confused as to the syntax

Reply via email to