package Foo; use strict; BEGIN { my @modules = (); opendir DIRHANDLE, 'Foo'; while (my $file = readdir DIRHANDLE) { if ($file =~ /\.pm$/) { $file=~s/\.pm//; push @modules, $file; } } closedir DIRHANDLE; require Exporter; our @ISA = qw(Exporter); our @EXPORT = (); for my $module (@modules) { eval 'use Foo::'.$module; { no strict 'refs'; push @EXPORT, @{"Foo\:\:$module\:\:EXPORT"}; } }; } 1;