in reply to Re^2: Exporting use strict/warnings into main::
in thread Exporting use strict/warnings into main::

I dunno, I found it very easy to understand what the Anonymonk meant. Is it up to a module author to blow up a script that its consumer may have written dangerously? For whatever reason, some people (ill-advisedly) write code without strict, and it works. If that code loads the OP's module, it will cease to work. That seems simple.

$ cat MyClass.pm
use strict; use warnings; package MyClass { use parent 'Exporter'; our @EXPORT = 'foo'; sub foo { 42 } }; 1;

$ cat script.pl
use lib '.'; use MyClass; $bar = foo; print "$bar\n";

$ perl script.pl
42

$ cat MyClass2.pm
use strict; use warnings; package MyClass2 { use parent 'Exporter'; our @EXPORT = 'foo'; use Import::Into; strict->import::into(1); sub foo { 42 } }; 1;

$ cat script2.pl
use lib '.'; use MyClass2; $bar = foo; print "$bar\n";

$ perl script2.pl
Global symbol "$bar" requires explicit package name (did you forget to + declare "my $bar"?) at script2.pl line 4. Global symbol "$bar" requires explicit package name (did you forget to + declare "my $bar"?) at script2.pl line 6. Execution of script2.pl aborted due to compilation errors.

Hope this helps!


The way forward always starts with a minimal test.

Replies are listed 'Best First'.
Re^4: Exporting use strict/warnings into main::
by haukex (Archbishop) on May 19, 2020 at 21:10 UTC
    I dunno, I found it very easy to understand what the Anonymonk meant. Is it up to a module author to blow up a script that its consumer may have written dangerously? For whatever reason, some people (ill-advisedly) write code without strict, and it works. If that code loads the OP's module, it will cease to work. That seems simple.

    I'm reading the AM's post in detail for the third time now and I'm sorry, but I think your interpretation is reaching a bit. The AM may have been attempting to make a comment about whether modules should enable strict in the user's code or not - but that's not what the node says, instead, it says "[the user's] latent source-code compile-time bugs now kill [the module]", which of course is nonsense, and that makes it impossible to tell whether this is miscommunicated, misinformed, or trolling. (Considering the discussion that broke out over it, if it's the latter, they were successful.)

    My own opinion on the matter is simple, everyone is free to write their code however they like, whether their choices are to their disadvantage or (hopefully) advantage, and a module author is free to enable strict in the user's code (assuming they document it), and the user is free to use or not use the module or, if they disagree or are forced to work without strict e.g. because they're on a legacy codebase, they can write no strict after loading the module.