add Prefix and Darwin support

--- perl-cleaner
+++ perl-cleaner
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!@GENTOO_PORTAGE_EPREFIX@/bin/bash
 # vim: set et sw=4 sts=4 tw=80:
 # Copyright 2005-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
@@ -22,13 +22,13 @@
 PKGS_EXCEPTIONS="dev-lang/perl sys-devel/libperl app-emulation/emul-linux-x86-baselibs"
 PKGS_MANUAL=""
 
-PKG_DBDIR=/var/db/pkg
+PKG_DBDIR="@GENTOO_PORTAGE_EPREFIX@/var/db/pkg"
 
 # See bug 504116 for details
-if [ -e /lib/gentoo/functions.sh ]; then
-    . /lib/gentoo/functions.sh
-elif [ -e /etc/init.d/functions.sh ]; then
-    . /etc/init.d/functions.sh
+if [ -e "@GENTOO_PORTAGE_EPREFIX@/lib/gentoo/functions.sh" ]; then
+    . "@GENTOO_PORTAGE_EPREFIX@/lib/gentoo/functions.sh"
+elif [ -e "@GENTOO_PORTAGE_EPREFIX@/etc/init.d/functions.sh" ]; then
+    . "@GENTOO_PORTAGE_EPREFIX@/etc/init.d/functions.sh"
 else
     echo "$0: Unable to find functions.sh"
     exit 1
@@ -157,7 +157,7 @@
 
     veinfo 1 "Locating ph files for removal"
     eindent ""
-    for i in /usr/lib{,64,x32}/perl5 ; do
+    for i in "@GENTOO_PORTAGE_EPREFIX@"/usr/lib{,64,x32}/perl5 ; do
         [[ ! -d ${i} ]] && continue
         veinfo 4 "...in ${i}"
         while IFS= read -r -d $'\0' file ; do
@@ -183,13 +183,13 @@
         veinfo 1 "Pretend. Nothing to do."
         return
     fi
-    pushd /usr/include > /dev/null
+    pushd "@GENTOO_PORTAGE_EPREFIX@"/usr/include > /dev/null
     if [[ ${version} =~ ^5.(8|10) ]] ; then
         eindent
-        veinfo 2 "...in /usr/include"
+        veinfo 2 "...in @GENTOO_PORTAGE_EPREFIX@/usr/include"
         h2ph ${option} * 2>/dev/null
         for dir in sys arpa netinet bits security asm gnu linux ; do
-            veinfo 2 "...in /usr/include/$dir/"
+            veinfo 2 "...in @GENTOO_PORTAGE_EPREFIX@/usr/include/$dir/"
             h2ph ${option} -r $dir/*
         done
         eoutdent
@@ -220,13 +220,16 @@
         veinfo 1 "Locating ebuilds linked against libperl"
     fi
 
+    local scanelf=scanelf
+    [[ -e "@GENTOO_PORTAGE_EPREFIX@"/usr/lib/libperl.dylib ]] \
+        && scanelf=scanmacho
     if ${LIBPERL} ; then
-        if ! type -P scanelf >/dev/null 2>&1; then
-            ewarn "scanelf not found! Install app-misc/pax-utils."
+        if ! type -P ${scanelf} >/dev/null 2>&1; then
+            ewarn "${scanelf} not found! Install app-misc/pax-utils."
             ewarn "--libperl is disbled."
             LIBPERL=false
         else
-            SONAME="$(scanelf -qBS "$(realpath /usr/lib/libperl.so 2>/dev/null )" | awk '{ print $1 }')"
+            SONAME="$(${scanelf} -qBS "$(realpath "@GENTOO_PORTAGE_EPREFIX@"/usr/lib/libperl.{so,dylib} 2>/dev/null )" | awk '{ print $1 }')"
             veinfo 4 SONAME="${SONAME}"
         fi
     fi
@@ -268,7 +271,7 @@
             while read -r type file ; do
                 shopt -s extglob
                 [[ ${type} == obj ]] || [[ ${type} == sym ]] || continue
-                [[ ${file} =~ ^/usr/(share|lib(32|64|x32)?)/perl5 ]] || continue
+                [[ ${file} =~ ^"@GENTOO_PORTAGE_EPREFIX@"/usr/(share|lib(32|64|x32)?)/perl5 ]] || continue
                 file=${file% +(!([[:space:]])) +([[:digit:]])}
                 shopt -u extglob
                 if ${FORCE} || outdated_path "${file}" ; then
@@ -302,7 +305,7 @@
 
         if ${LIBPERL} ; then
             # We assume the broken libs have all bin or lib in their path
-            broken_libs="$(scanelf -qBn < <(awk '/^(obj|sym) [^ ]*\/(s?bin|lib(32|64|x32)?)\// && ! /^obj [^ ]*\/usr\/lib\/debug\//{ print $2 }' ${content} ) | grep -o 'libperl\.so\.[0-9.]*' | sort -u )"
+            broken_libs="$(${scanelf} -qBn < <(awk '/^(obj|sym) [^ ]*\/(s?bin|lib(32|64|x32)?)\// && ! /^obj [^ ]*\/usr\/lib\/debug\//{ print $2 }' ${content} ) | grep -o 'libperl\.\(so\|dylib\)\.[0-9.]*' | sort -u )"
             if [[ -n "${broken_libs}" ]] ; then
                 if ${FORCE} || [[ ${broken_libs} != ${SONAME} ]] ; then
                     PKGS_TO_REMERGE+=" ${CATPKGVER}"
@@ -327,7 +330,7 @@
         exit $?
     fi
 
-    if [[ ${PMS_COMMAND[${PMS_INDEX}]} == emerge && -x /usr/bin/portageq ]] ; then
+    if [[ ${PMS_COMMAND[${PMS_INDEX}]} == emerge && -x "@GENTOO_PORTAGE_EPREFIX@"/usr/bin/portageq ]] ; then
         # Filter out --getbinpkg, --getbinpkgonly, --usepkg and --usepkgonly options in EMERGE_DEFAULT_OPTS
         emerge_default_opts=""
         for option in $(portageq envvar EMERGE_DEFAULT_OPTS ) ; do
@@ -383,7 +386,7 @@
     veinfo 1 "or edited. This script cannot deal with them."
     vecho 1
 
-    for i in /usr/{share,lib{,32,64,x32}}/perl5 ; do
+    for i in "@GENTOO_PORTAGE_EPREFIX@"/usr/{share,lib{,32,64,x32}}/perl5 ; do
         [[ -d $i ]] && perlpath[${#perlpath[*]}]="$(realpath $i 2>/dev/null )"
     done
     [[ ${#perlpath[*]} == 0 ]] && return
