/tmp/perlmonks>cat run.pl #!/usr/bin/perl use strict; use warnings; use lib '/tmp/perlmonks'; # Tons of work omitted ... ;-) @ARGV and chdir '/tmp/unrelated'; require Mod; Mod::where(); /tmp/perlmonks>cat Mod.pm package Mod; use v5.12; # for say use strict; use warnings; use FindBin; sub where { say "Script is in $FindBin::Bin"; say "Script basename is $FindBin::Script"; say "Real script directory is $FindBin::RealBin"; say "Real script basename is $FindBin::RealScript"; say "Module was loaded from $INC{'Mod.pm'}"; } 1; /tmp/perlmonks>perl run.pl Script is in /tmp/perlmonks Script basename is run.pl Real script directory is /tmp/perlmonks Real script basename is run.pl Module was loaded from /tmp/perlmonks/Mod.pm /tmp/perlmonks> #### /tmp/perlmonks>perl -MMod -e Mod::where Script is in /tmp/perlmonks Script basename is -e Real script directory is /tmp/perlmonks Real script basename is -e Module was loaded from Mod.pm /tmp/perlmonks> #### /tmp/perlmonks>perl run.pl x Cannot find current script 'run.pl' at /usr/share/perl5/FindBin.pm line 166. BEGIN failed--compilation aborted at /usr/share/perl5/FindBin.pm line 166. Compilation failed in require at /tmp/perlmonks/Mod.pm line 6. BEGIN failed--compilation aborted at /tmp/perlmonks/Mod.pm line 6. Compilation failed in require at run.pl line 11. /tmp/perlmonks> #### /tmp/perlmonks>touch /tmp/unrelated/run.pl /tmp/perlmonks>perl run.pl Script is in /tmp/unrelated Script basename is run.pl Real script directory is /tmp/unrelated Real script basename is run.pl Module was loaded from /tmp/perlmonks/Mod.pm /tmp/perlmonks> #### /tmp/perlmonks>perl -MFindBin run.pl x Script is in /tmp/perlmonks Script basename is run.pl Real script directory is /tmp/perlmonks Real script basename is run.pl Module was loaded from /tmp/perlmonks/Mod.pm /tmp/perlmonks>