当我尝试使用 cpan 安装 Perl 模块时,为什么会出现“404 Not Found”和 "Failed to change directory" 错误?

Why do I get "404 Not Found" and "Failed to change directory" errors when I try to install a Perl module with cpan?

我尝试使用此命令安装 Capture::Tiny

cpan Capture/Tiny

但是安装失败,输出如下:

Reading '/root/.cpan/Metadata'
  Database was generated on Wed, 25 May 2016 08:17:02 GMT
Running make for C/C//C/Ca/Capture/Tiny
Fetching with HTTP::Tiny:
http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
HTTP::Tiny failed with code[404] message[Not Found]
Fetching with HTTP::Tiny:
http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny.gz
HTTP::Tiny failed with code[404] message[Not Found]

Trying with
    /usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548"
to get
    http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
--2016-05-25 21:07:02--  http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
Resolving mirrors.dotsrc.org (mirrors.dotsrc.org)... 130.225.254.116, 2001:878:346::116
Connecting to mirrors.dotsrc.org (mirrors.dotsrc.org)|130.225.254.116|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2016-05-25 21:07:02 ERROR 404: Not Found.


    Function system("/usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548" "http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny" ")
    returned status 8 (wstat 2048), left
/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548 with size 0
    Warning: no success downloading '/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548'. Giving up on it.
Fetching with Net::FTP:
ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
  Couldn't cwd cpan/authors/id/C/C/C/Ca/Capture: Failed to change directory.

Fetching with Net::FTP
ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny.gz
  Couldn't cwd cpan/authors/id/C/C/C/Ca/Capture: Failed to change directory.


Trying with
    /usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548"
to get
    ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
--2016-05-25 21:07:03--  ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
           => ‘/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548’
Resolving mirrors.dotsrc.org (mirrors.dotsrc.org)... 130.225.254.116, 2001:878:346::116
Connecting to mirrors.dotsrc.org (mirrors.dotsrc.org)|130.225.254.116|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /cpan/authors/id/C/C//C/Ca/Capture ... 
No such directory ‘cpan/authors/id/C/C//C/Ca/Capture’.


    Function system("/usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548" "ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny" ")
    returned status 8 (wstat 2048), left
/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548 with size 0
    Warning: no success downloading '/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548'. Giving up on it.

Trying with
    /usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548"
to get
    http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
--2016-05-25 21:07:03--  http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
Resolving mirrors.dotsrc.org (mirrors.dotsrc.org)... 130.225.254.116, 2001:878:346::116
Connecting to mirrors.dotsrc.org (mirrors.dotsrc.org)|130.225.254.116|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2016-05-25 21:07:03 ERROR 404: Not Found.


    Function system("/usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548" "http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny" ")
    returned status 8 (wstat 2048), left
/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548 with size 0

Trying with
    /usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548"
to get
    ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
--2016-05-25 21:07:03--  ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
           => ‘/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548’
Resolving mirrors.dotsrc.org (mirrors.dotsrc.org)... 130.225.254.116, 2001:878:346::116
Connecting to mirrors.dotsrc.org (mirrors.dotsrc.org)|130.225.254.116|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /cpan/authors/id/C/C//C/Ca/Capture ... 
No such directory ‘cpan/authors/id/C/C//C/Ca/Capture’.


    Function system("/usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548" "ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny" ")
    returned status 8 (wstat 2048), left
/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548 with size 0
    Warning: no success downloading '/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548'. Giving up on it.
No external ftp command available

Fetching with HTTP::Tiny:
http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
HTTP::Tiny failed with code[404] message[Not Found]
Fetching with HTTP::Tiny:
http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny.gz
HTTP::Tiny failed with code[404] message[Not Found]

Trying with
    /usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548"
to get
    http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
--2016-05-25 21:07:03--  http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
Resolving mirrors.dotsrc.org (mirrors.dotsrc.org)... 130.225.254.116, 2001:878:346::116
Connecting to mirrors.dotsrc.org (mirrors.dotsrc.org)|130.225.254.116|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2016-05-25 21:07:03 ERROR 404: Not Found.


    Function system("/usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548" "http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny" ")
    returned status 8 (wstat 2048), left
/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548 with size 0
    Warning: no success downloading '/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548'. Giving up on it.

Trying with
    /usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548"
to get
    http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
--2016-05-25 21:07:03--  http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
Resolving mirrors.dotsrc.org (mirrors.dotsrc.org)... 130.225.254.116, 2001:878:346::116
Connecting to mirrors.dotsrc.org (mirrors.dotsrc.org)|130.225.254.116|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2016-05-25 21:07:03 ERROR 404: Not Found.


    Function system("/usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548" "http://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny" ")
    returned status 8 (wstat 2048), left
/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548 with size 0
    Warning: no success downloading '/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548'. Giving up on it.
Fetching with Net::FTP:
ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
  Couldn't cwd cpan/authors/id/C/C/C/Ca/Capture: Failed to change directory.

Fetching with Net::FTP
ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny.gz
  Couldn't cwd cpan/authors/id/C/C/C/Ca/Capture: Failed to change directory.


Trying with
    /usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548"
to get
    ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
--2016-05-25 21:07:03--  ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
           => ‘/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548’
Resolving mirrors.dotsrc.org (mirrors.dotsrc.org)... 130.225.254.116, 2001:878:346::116
Connecting to mirrors.dotsrc.org (mirrors.dotsrc.org)|130.225.254.116|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /cpan/authors/id/C/C//C/Ca/Capture ... 
No such directory ‘cpan/authors/id/C/C//C/Ca/Capture’.


    Function system("/usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548" "ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny" ")
    returned status 8 (wstat 2048), left
/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548 with size 0
    Warning: no success downloading '/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548'. Giving up on it.

Trying with
    /usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548"
to get
    ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
--2016-05-25 21:07:03--  ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny
           => ‘/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548’
Resolving mirrors.dotsrc.org (mirrors.dotsrc.org)... 130.225.254.116, 2001:878:346::116
Connecting to mirrors.dotsrc.org (mirrors.dotsrc.org)|130.225.254.116|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /cpan/authors/id/C/C//C/Ca/Capture ... 
No such directory ‘cpan/authors/id/C/C//C/Ca/Capture’.


    Function system("/usr/bin/wget -O "/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548" "ftp://mirrors.dotsrc.org/cpan/authors/id/C/C//C/Ca/Capture/Tiny" ")
    returned status 8 (wstat 2048), left
/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548 with size 0
    Warning: no success downloading '/root/.cpan/sources/authors/id/C/C/C/Ca/Capture/Tiny.tmp1548'. Giving up on it.
No external ftp command available

Please check, if the URLs I found in your configuration file
(http://mirrors.dotsrc.org/cpan/, ftp://mirrors.dotsrc.org/cpan/) are
valid. The urllist can be edited. E.g. with 'o conf urllist push
ftp://myurl/'

Could not fetch authors/id/C/C//C/Ca/Capture/Tiny

我尝试了多个镜像,但它们都给出了相同的错误。我该如何解决这个问题?

尝试将命令从 cpan Capture/Tiny 更改为 cpan Capture::Tiny。如果失败,请从 here 下载 tarball,然后 运行 cpanm Capture-Tiny-0.40.tar.gz

你运行:

cpan Capture/Tiny
#           ^-- notice the slash

斜杠告诉cpan 在指定路径查找分发文件。在这种情况下,cpan 搜索作者 Capture 的分发文件 Tiny。这个不存在,所以下载失败。

传递路径 (Foo/Bar) 而不是模块名称 (Foo::Bar) 让你 install a specific version of a distribution. To install Capture-Tiny-0.41-TRIAL,这是一个开发版本,你会 运行:

cpan DAGOLDEN/Capture-Tiny-0.41-TRIAL.tar.gz

但您可能只想安装最新的非开发版本 Capture::Tiny,因此您应该 运行:

cpan Capture::Tiny