blob: 882b2b773e21e446ec15f8ad530e9c9e3c7d1754 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package circular::require;
use strict;
use warnings;
use Package::Stash;
my %seen;
my $saved;
sub _require {
my ($file) = @_;
if (exists $seen{$file} && !$seen{$file}) {
warn "Circular require detected: $file (from " . caller() . ")\n";
}
$seen{$file} = 0;
my $ret = $saved ? $saved->($file) : CORE::require($file);
$seen{$file} = 1;
return $ret;
}
sub import {
my $stash = Package::Stash->new('CORE::GLOBAL');
if ($saved) {
$stash->add_package_symbol('&require' => $saved);
}
else {
$stash->remove_package_symbol('&require');
}
}
sub unimport {
my $stash = Package::Stash->new('CORE::GLOBAL');
my $old_require = $stash->get_package_symbol('&require');
$saved = $old_require
if defined($old_require) && $old_require != \&_require;
$stash->add_package_symbol('&require', \&_require);
}
1;
|