TL;DR: Running hash -r
or just starting a new shell usually fixes this problem.
If the file is actually gone, then the shell probably just still has it hashed.
First I suggest you verify that /usr/local/bin/cpan
really is gone:
ls -l /usr/local/bin/cpan
If there is something there, then you didn't fully uninstall. If there is nothing there, then you will get this message:
ls: cannot access '/usr/local/bin/cpan': No such file or directory
Assuming you got that message, but bash
is trying to run /usr/local/bin/cpan
when you type in cpan
and press Enter, the problem is most likely that bash
still has that path hashed. Rather than looking up where external commands are every time, shells typically hash their locations. So you can fix the problem by telling bash
to "rehash," by running:
hash -r
Or just start a new shell.
If that doesn't work, check if it's an alias or shell function.
If the file is neither still present nor still hashed, then most likely cpan
is an alias or shell function that acts as a wrapper for /usr/local/bin/cpan
. To ascertain this, run:
type -a cpan
If it's an alias or shell function, that will show the definition. Then you can unset it with unalias cpan
if it's an alias, or unset -f cpan
if it's a shell function.
You will ultimately want to remove the definition from whatever startup script contains it. Usually it will be in the .bashrc
file in your home directory. Aliases are sometimes defined in .bash_aliases
. (Occasionally people define aliases and shell functions in .profile
, .bash_profile
, or .bash_login
, even though this is not a very good practice.)
If that doesn't work, consider how you're running cpan
or what shell you're in.
If the file is gone, not still hashed, not an alias or shell function, and type -a
doesn't reveal the problem, then most likely you are either (a) not running cpan
directly through that command, or (b) using a shell other than bash
. In the former case there is no way to answer without further details.
The latter case seems unlikely since your shell calls itself bash
, though every once in a while someone ill-advisedly makes a symlink called bash
to a shell that isn't (which isn't advisable). The truth is, I'm mainly mentioning this for the benefit of other readers. Based on that message, you're almost certainly using bash
.
However, in case you're not or might not be, run echo "$BASH_VERSION"
to see if you're running bash
--this should be unset in other shells--and echo "$SHELL"
to see what your default shell is. Rehashing works differently--or is at least achieved differently--in other shells.
Some other Bourne-style shells, like zsh
, have a rehash
command that you would run instead of hash -r
. That is also how you would cause rehashing to occur in csh
and tcsh
.
/usr/local/bin
, right? Also Is it perl that's screwed up or cpan? What happens if you runperl -v
or something? What doestype -a cpan
return? Doessudo dpkg-reconfigure perl
help?