Finding world-writable files in local directories only
Processing mount points

This can be improved in many ways:


# Compile a list of mountpoints that need to be scanned
my @mounts;
open MT, "&lt;${MTAB}" or die "Cannot open ${MTAB}, $!";

# We only want the local mountpoints
while (&lt;MT&gt;) {
  if ($_ =~ /ext[34]/) {
    my @line = split;
    push(@mounts, $line[1]);
  }
}

close MT;



Using bare names for file handles is not recommended: 
replace MT with my $MT, and &lt;MT&gt; with &lt;$MT&gt;.

The comment talks about local mount points.
That's too vague, when in fact you're looking specifically for ext3 and ext4 filesystems.

You could simplify if ($_ =~ /ext[34]/) as if (/ext[34]/).

You could put the entire while loop inside a map, and it will be still readable.

Putting it together, you can rewrite like this:

open my $MT, "&lt;${MTAB}" or die "Cannot open ${MTAB}, $!";

# Compile a list of mountpoints that need to be scanned
# We only want the ext3 ext4 partitions
my @mounts = map((split)[1], grep(/ext[34]/, &lt;$MT&gt;));

close $MT;


Note that if you didn't find any mount points,
the script has nothing to process, so it should exit:

die 'no mount points to process' unless @mounts;


Try to apply these techniques everywhere in the script,
especially the bit about filehandlers.




# Read in the list of excluded files and create a regex from them
my $regExcld = do {
  open XCLD, "&lt;${EXCLUDE}" or die "Cannot open ${EXCLUDE}, $!\n";
  my @ignore = &lt;XCLD&gt;;
  chomp @ignore;
  local $" = '|';
  qr/@ignore/;
};



As earlier, replace XCLD with my $XCLD or something.
You also forgot to close it.

Btw, a common way to shorten my @arr = &lt;$fh&gt;; chomp @arr as chomp(my @arr = &lt;$fh&gt;).

Most importantly,
should it be really a fatal error if the file with excluded patterns doesn't exist?
It might make sense to make this optional.
Perhaps issue a warning instead, something like this:

my $regExcld = do {
  if (open my $fh, "&lt;${EXCLUDE}") {
      chomp(my @ignore = &lt;$fh&gt;);
      close($fh);
      local $" = '|';
      qr/@ignore/;
  } else {
      warn "Cannot open ${EXCLUDE}, $!\n";
      undef;
  }
};




This bit seems pointless:


# Create a regex containing mountpoint dev numbers to compare file device numbers to.
my $devRegex = do {
  chomp @devNum;
  local $" = '|';
  qr/@devNum/;
};



Because @devNum is an empty array in your script,
you never actually gave it any values.



This is quite strange:


# Create the output file path if it doesn't already exist.
mkdir("${DIR}" or die "Cannot execute mkdir on ${DIR}, $!") unless (-d "${DIR}");



You misplaced the die:
it will run if "${DIR}" is empty,
not if mkdir fails.

Also, there's no need whatsoever to double-quote ${DIR}.

Corrected and simplified:

mkdir($DIR) or die "Cannot execute mkdir on ${DIR}, $!" unless -d $DIR;