---
name: "ExtUtils::Command::MM"
section: "3perl"
platform: "linux"
package: "perl"
version: "5.44.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/ExtUtils::Command::MM/3perl"
---

# ExtUtils::Command::MM(3perl)

Commands for the MM's to use in Makefiles

## NAME

ExtUtils::Command::MM - Commands for the MM's to use in Makefiles

## SYNOPSIS

```
  perl "-MExtUtils::Command::MM" -e "function" "--" arguments...
```

## DESCRIPTION

**FOR INTERNAL USE ONLY!**  The interface is not stable.

ExtUtils::Command::MM encapsulates code which would otherwise have to be done with large "one" liners.

Any $(FOO) used in the examples are make variables, not Perl.

- **test\_harness**

  ```
    test_harness($verbose, @test_libs);
  ```

  Runs the tests on `@ARGV` via Test::Harness passing through the `$verbose` flag.  Any `@test_libs` will be unshifted onto the test's `@INC`.

  `@test_libs` are run in alphabetical order.

- **pod2man**

  ```
    pod2man( '--option=value',
             $podfile1 => $manpage1,
             $podfile2 => $manpage2,
             ...
           );
    # or args on @ARGV
  ```

  **pod2man()** is a function performing most of the duties of the pod2man program.  Its arguments are exactly the same as pod2man as of 5.8.0 with the addition of:

  ```
      --perm_rw   octal permission to set the resulting manpage to
  ```

  And the removal of:

  ```
      --verbose/-v
      --help/-h
  ```

  If no arguments are given to pod2man it will read from `@ARGV`.

  If Pod::Man is unavailable, this function will warn and return undef.

- **warn\_if\_old\_packlist**

  ```
    perl "-MExtUtils::Command::MM" -e warn_if_old_packlist <somefile>
  ```

  Displays a warning that an old packlist file was found.  Reads the filename from `@ARGV`.

- **perllocal\_install**

  ```
      perl "-MExtUtils::Command::MM" -e perllocal_install
          <type> <module name> <key> <value> ...
      # VMS only, key|value pairs come on STDIN
      perl "-MExtUtils::Command::MM" -e perllocal_install
          <type> <module name> < <key>|<value> ...
  ```

  Prints a fragment of POD suitable for appending to perllocal.pod. Arguments are read from `@ARGV`.

  'type' is the type of what you're installing.  Usually 'Module'.

  'module name' is simply the name of your module.  (Foo::Bar)

  Key/value pairs are extra information about the module.  Fields include:

  ```
      installed into      which directory your module was out into
      LINKTYPE            dynamic or static linking
      VERSION             module version number
      EXE_FILES           any executables installed in a space separated
                          list
  ```

- **uninstall**

  ```
      perl "-MExtUtils::Command::MM" -e uninstall <packlist>
  ```

  A wrapper around **ExtUtils::Install::uninstall()**.  Warns that uninstallation is deprecated and doesn't actually perform the uninstallation.

- **test\_s**

  ```
     perl "-MExtUtils::Command::MM" -e test_s <file>
  ```

  Tests if a file exists and is not empty (size \> 0). *Exits* with 0 if it does, 1 if it does not.

- **cp\_nonempty**

  ```
    perl "-MExtUtils::Command::MM" -e cp_nonempty <srcfile> <dstfile> <perm>
  ```

  Tests if the source file exists and is not empty (size \> 0). If it is not empty it copies it to the given destination with the given permissions.
