提问人:Marcos Camargo 提问时间:3/16/2023 最后编辑:toolicMarcos Camargo 更新时间:3/16/2023 访问量:103
在 2 个不同的 CPAN 模块中具有相同名称的子程序
Subroutine with same name in 2 different CPAN modules
问:
运行perl时出现此错误:
[2023 年 3 月 16 日星期四 00:24:23] list_directory_1.cgi:子程序 main::getcwd 在 /usr/lib/cgi-bin/list_directory_1.cgi 行重新定义 15.
我认为它来自CPAN模块和.如何指定要从模块中获取此子例程?getcwd
Cwd
POSIX
Cwd
答:
10赞
ikegami
3/16/2023
#1
事实上,默认情况下,Cwd 和 POSIX 都会导出。getcwd
$ perl -we'use Cwd; use POSIX;'
Subroutine main::getcwd redefined at -e line 1.
解决方案是仅导入您需要的符号。
use Cwd qw( abs_path );
use POSIX qw( strftime floor );
use DateTime qw( ); # Import nothing.
如果您始终采用这种显式列出导入的样式,您将获得能够一目了然地看到潜艇来源的好处。
4赞
brian d foy
3/16/2023
#2
除了池上已经展示的内容之外,还有另一条路要走。而不是导入,完全指定您想要的:
use Cwd (); # import nothing
my $dir = Cwd::getcwd();
如果人们知道该函数可以来自不同的来源,但不记得您选择了哪个来源,这会很有帮助。
评论
use POSIX qw( seek );
.除了是内置的。无需用 POSIX 中的内置覆盖。seek
seek