Perl Code

Jerry Benton jerry.benton at
Thu Jan 28 20:29:50 UTC 2016

Can someone better than me at Perl, which isn’t really hard to do, try to make some sense of this? I am thinking this isn’t really applicable since Perl has pretty much been standardized. This is at the beginning of /usr/sbin/MailScanner.

I am think I can cut this down to:

  require MIME::Base64;
  require MIME::QuotedPrint;


# Awkard BEGIN block so that we pick up MIME::Base64 from the right place!
  my(@oldinc, at safecopy,$path, at corepaths, at notcorepaths);

  my $seensv = 0;
  foreach $path (@INC) {
    if ($path =~ /site|vendor/i) {
      $seensv = 1;
    if ($seensv) {
      push @notcorepaths, $path unless $path eq '.';
    # If it's a simple path before site or vendor, save it for the end
    if ($path =~ m#/usr/(local/)?lib\d*/perl\d*/\d\.\d#) {
      push @corepaths, $path;
    } else {
      push @notcorepaths, $path;

  # Now we have all the site and vendor paths in @notcorepaths, and the
  # perl5 paths in @corepaths. We want notcore + core, so the notcore ones
  # take priority.
  #print STDERR '@INC = ' . "\n" . join("\n", @INC) . "\n";
  @INC = (@notcorepaths, @corepaths);
  #print STDERR '@INC = ' . "\n" . join("\n", @INC) . "\n";

  # Look in /usr/local/mailscanner/utils for the modules
  @oldinc = @INC;
  @safecopy = @INC;

  # Duplicate path with /usr/local/mailscanner/utils stuck on the front
  # of each element
  foreach $path (reverse @oldinc) {
    next unless $path =~ /\//;
    $path =~ s/^\/usr/\/share\/mailscanner\/perl/;
    unshift @INC, $path;

  require MIME::Base64;
  require MIME::QuotedPrint;

  @INC = @safecopy;

Jerry Benton

More information about the MailScanner mailing list