develooper Front page | perl.perl5.porters | Postings from August 2001

[PATCH] put useful info in %INC for files loaded by a hook in @INC

Thread Next
From:
Rafael Garcia-Suarez
Date:
August 28, 2001 05:18
Subject:
[PATCH] put useful info in %INC for files loaded by a hook in @INC
Message ID:
20010828142343.A19299@rafael
This patch makes useful the info put in %INC when a file is
loaded via a hook. So, if several hooks are put in @INC, it's
possible to know which hook loaded which module.

Example :
	push @INC, sub {
	    if ($_[1] eq 'Foo.pm') { return *DATA } else { return undef }
	};
	require Foo;
	print "$INC{'Foo.pm'} - $INC[$#INC]\n";
	__DATA__
	package Foo; 1;

Output :
	/loader/0x81095c8/Foo.pm - CODE(0x81095c8)
The addresses now match.

I also briefly documented this in perlvar/%INC.

I'll add tests for this, but the fact that the tests do not run
on perl+stdio annoys me. (Simply returning *DATA from the hook may be
a solution.)

--- pp_ctl.c.orig	Mon Aug 27 18:20:23 2001
+++ pp_ctl.c	Tue Aug 28 11:58:23 2001
@@ -3160,7 +3160,7 @@
 		    }
 
 		    Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
-				   PTR2UV(SvANY(loader)), name);
+				   PTR2UV(SvRV(dirsv)), name);
 		    tryname = SvPVX(namesv);
 		    tryrsfp = 0;
 
--- pod/perlvar.pod.orig	Sat Aug 25 17:39:13 2001
+++ pod/perlvar.pod	Tue Aug 28 12:19:01 2001
@@ -1080,6 +1080,11 @@
 operator uses this hash to determine whether a particular file has
 already been included.
 
+If the file was loaded via a hook (see L<perlfunc/require> for a
+description of these hooks), a fake filename is inserted into %INC. It
+looks like F</loader/0x81095c8/Foo.pm>, where the hexadecimal number
+corresponds to the reference that was put in @INC.
+
 =item %ENV
 
 =item $ENV{expr}

Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About