in reply to Re^2: PDL and srand puzzle
in thread PDL and srand puzzle

The CORE namespace take priority.

Thanks for that - I now think I know what the rule is:
<RULE>
If main::foo and CORE::foo both exist, then "foo" calls main::foo if main::foo has been imported in from some module.
Otherwise "foo" calls CORE::foo.
</RULE>
Is that the way it works ?

I'm still a bit puzzled as to why there should be this difference - but if that's the rule, then that's the rule.

Cheers,
Rob

Replies are listed 'Best First'.
Re^4: PDL and srand puzzle
by sectokia (Friar) on Jun 06, 2024 at 00:40 UTC

    If you declare a sub foo() in your perl code, and core::foo already exists, you will get a warning "Ambiguous call resolved as CORE::foo(), qualify as such or use &" and core::foo will be called.

      If you declare a sub foo() in your perl code, and core::foo already exists, you will get a warning "Ambiguous call ....

      Yes - but only if there's a call to foo() made after that declaration of sub foo().
      At least, that's what I'm seeing on perl-5.38.0:
      D:\>perl -wle "sub sqrt {return sprintf '%.4g', $_[0] ** 0.5}" D:\>perl -wle "print sqrt(3); sub sqrt {return sprintf '%.4g', $_[0] * +* 0.5};" 1.73205080756888 D:\>perl -wle "print sqrt(3); sub sqrt {return sprintf '%.4g', $_[0] * +* 0.5}; print sqrt(2);" Ambiguous call resolved as CORE::sqrt(), qualify as such or use & at - +e line 1. 1.73205080756888 1.4142135623731
      Cheers,
      Rob