---
name: "Module::Load"
section: "3pm"
platform: "linux"
package: "libmodule-load-perl"
version: "0.10-2"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/Module::Load/3pm"
---

# Module::Load(3pm)

runtime require of both modules and files

## NAME

Module::Load - runtime require of both modules and files

## SYNOPSIS

```
        use Module::Load;
```

```
    my $module = 'Data:Dumper';
    load Data::Dumper;      # loads that module
    load 'Data::Dumper';    # ditto
    load $module            # tritto
```

```
    my $script = 'some/script.pl'
    load $script;
    load 'some/script.pl';      # use quotes because of punctuations
```

```
    load thing;             # try 'thing' first, then 'thing.pm'
```

```
    load CGI, ':standard'   # like 'use CGI qw[:standard]'
```

## DESCRIPTION

`"load"` eliminates the need to know whether you are trying to require either a file or a module.

If you consult `"perldoc -f require"` you will see that `"require"` will behave differently when given a bareword or a string.

In the case of a string, `"require"` assumes you are wanting to load a file. But in the case of a bareword, it assumes you mean a module.

This gives nasty overhead when you are trying to dynamically require modules at runtime, since you will need to change the module notation (`"Acme::Comment"`) to a file notation fitting the particular platform you are on.

`"load"` elimates the need for this overhead and will just DWYM.

## Rules

`"load"` has the following rules to decide what it thinks you want:

- •

  If the argument has any characters in it other than those matching
   `"\w"`, `":"` or `"'"`, it must be a file

- •

  If the argument matches only `"[\w:']"`, it must be a module

- •

  If the argument matches only `"\w"`, it could either be a module or a
   file. We will try to find `"file"` first in `@INC` and if that fails,
   we will try to find `"file.pm"` in `@INC`.
   If both fail, we die with the respective error messages.

## Caveats

Because of a bug in perl (#19213), at least in version 5.6.1, we have to hardcode the path seperator for a require on Win32 to be `"/"`, like on Unix rather than the Win32 `"\"`. Otherwise perl will not read it's own `%INC` accurately double load files if they are required again, or in the worst case, core dump.

`"Module::Load"` can not do implicit imports, only explicit imports. (in other words, you always have to specify expliclity what you wish to import from a module, even if the functions are in that modules' `@EXPORT`)

## AUTHOR

This module by Jos Boumans \<kane@cpan.org\>.

Thanks to Jonas B. Nielsen for making explicit imports work.

## COPYRIGHT

This module is copyright (c) 2002 Jos Boumans \<kane@cpan.org\>. All rights reserved.

This library is free software; you may redistribute and/or modify it under the same terms as Perl itself.
