in reply to Catalyst reload, 'use parent' and mro c3 (UPD: NOT Catalyst)

Probably just clear @ISA manually?
package SRS::MyTest; our @ISA; BEGIN { @ISA = (); } use parent 'File::Find'; BEGIN { print STDERR "HEREISIT @ISA\n"}; 1;
Where Catalyst's reloading code is described (or how to see it)?
Don't know about Catalyst, but it's probably something like:
delete $INC{'XXX.pm'}; require 'XXX.pm';
in fact:
# main.pl use XXX (); delete $INC{'XXX.pm'}; require 'XXX.pm';
# XXX.pm package XXX; use parent 'File::Find'; our @ISA; BEGIN { print STDERR "HEREISIT @ISA\n"}; 1;
that does just that
$ perl main.pl HEREISIT File::Find HEREISIT File::Find File::Find

Replies are listed 'Best First'.
Re^2: Catalyst reload, 'use parent' and mro c3
by vsespb (Chaplain) on Dec 23, 2015 at 19:50 UTC
    Probably just clear @ISA manually?
    Yes, that would work. Sad that I should insert this line too all of hundreds of files.
      Well, you can fix parent.pm instead... it's a very simple module:
      package parent; use strict; use vars qw($VERSION); $VERSION = '0.232'; sub import { my $class = shift; my $inheritor = caller(0); if ( @_ and $_[0] eq '-norequire' ) { shift @_; } else { for ( my @filename = @_ ) { if ( $_ eq $inheritor ) { warn "Class '$inheritor' tried to inherit from itself\n"; } s{::|'}{/}g; require "$_.pm"; # dies if the file is not found } } { no strict 'refs'; my %ISA = map { $_ => 1 } @{"$inheritor\::ISA"}; for (@_) { push @{"$inheritor\::ISA"}, $_ if not $ISA{$_}; } }; } 1;
      just put it somewhere in @INC before the standard one, and let us know if it works :)
        code looks good.
        just put it somewhere in @INC before the standard one
        probably better monkey-patch this: redefine and "sub import" in package "parent" somewhere in existing code (not in new "parent.pm") in order to not to make deploy more complicated. or even do this in catalyst dev-mode only.
        Is this still a parent.pm bug?