# Load command modules if (-d $cmddir) { opendir(CMDDIR, $cmddir) or die "Error opening '$cmddir': $!\n"; # Get only .pl files that start with 2 digits and that contain only # alphanumerics, underscores, hyphens or dots in their names. my @cmdfiles=map { (/^(\d{2}[-\w.]+\.pl)$/ && $1) || () } readdir(CMDDIR); closedir(CMDDIR); # Read each file and incorporate its %COMMANDS into %ALLCOMMANDS my $cmdfile; if (@cmdfiles) { foreach $cmdfile (@cmdfiles) { local %COMMANDS; eval "require '$cmddir/$cmdfile'"; die "Error loading '$cmddir/$cmdfile': $!\n" if $@; my ($k,$v); # Incorporate commands while (($k,$v)=each(%COMMANDS)) { $ALLCOMMANDS{$k}=$v; } } } else { # Print warning, but continue, because builtin commands can still # be used (not very useful, but...) warn "Warning: No command files found in directory '$cmddir'\n"; } } else { die "Fatal: Could not find commands dir '$cmddir'\n"; }