---
name: "Mojo::Loader"
section: "3pm"
platform: "linux"
package: "libmojolicious-perl"
version: "9.39+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Mojo::Loader"
---

# Mojo::Loader(3pm)

Load all kinds of things

## NAME

Mojo::Loader - Load all kinds of things

## SYNOPSIS

```
  use Mojo::Loader qw(data_section find_modules load_class);
  # Find modules in a namespace
  for my $module (find_modules 'Some::Namespace') {
    # Load them safely
    my $e = load_class $module;
    warn qq{Loading "$module" failed: $e} and next if ref $e;
    # And extract files from the DATA section
    say data_section($module, 'some_file.txt');
  }
```

## DESCRIPTION

Mojo::Loader is a class loader and plugin framework. Aside from finding modules and loading classes, it allows multiple files to be stored in the `"DATA"` section of a class, which can then be accessed individually.

```
  package Foo;
  1;
  __DATA__
  @@ test.txt
  This is the first file.
  @@ test2.html (base64)
  VGhpcyBpcyB0aGUgc2Vjb25kIGZpbGUu
  @@ test
  This is the
  third file.
```

Each file has a header starting with `"@@"`, followed by the file name and optional instructions for decoding its content. Currently only the Base64 encoding is supported, which can be quite convenient for the storage of binary data.

## FUNCTIONS

Mojo::Loader implements the following functions, which can be imported individually.

### data\_section

```
  my $all   = data_section 'Foo::Bar';
  my $index = data_section 'Foo::Bar', 'index.html';
```

Extract embedded file from the `"DATA"` section of a class, all files will be cached once they have been accessed for the first time.

```
  # List embedded files
  say for keys %{data_section 'Foo::Bar'};
```

### file\_is\_binary

```
  my $bool = file_is_binary 'Foo::Bar', 'test.png';
```

Check if embedded file from the `"DATA"` section of a class was Base64 encoded.

### find\_packages

```
  my @pkgs = find_packages 'MyApp::Namespace';
```

Search for packages in a namespace non-recursively.

### find\_modules

```
  my @modules = find_modules 'MyApp::Namespace';
  my @modules = find_modules 'MyApp::Namespace', {recursive => 1};
```

Search for modules in a namespace.

These options are currently available:

- recursive

  ```
    recursive => 1
  ```

  Search namespace recursively.

### load\_class

```
  my $e = load_class 'Foo::Bar';
```

Load a class and catch exceptions, returns a false value if loading was successful, a true value if the class was not found, or a Mojo::Exception object if loading failed. Note that classes are checked for a `"new"` method to see if they are already loaded, so trying to load the same class multiple times may yield different results.

```
  # Handle exceptions
  if (my $e = load_class 'Foo::Bar') {
    die ref $e ? "Exception: $e" : 'Not found!';
  }
```

### load\_classes

```
  my @classes = load_classes 'Foo::Bar';
```

Load all classes in a namespace recursively.

## SEE ALSO

Mojolicious, Mojolicious::Guides, \<https://mojolicious.org\>.
