我在运行perl时遇到此错误:[Thu 2023年3月16日00:24:23]列表目录1. cgi:子例程main::getcwd在/usr/lib/cgi-bin/list_directory_1.cgi第15行重新定义。我认为这是因为getcwd在CPAN模块Cwd和POSIX中定义,我如何指定这个子例程是从Cwd模块中获取的?
getcwd
Cwd
POSIX
wfsdck301#
实际上,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.
如果您始终采用这种显式列出导入的风格,您将获得能够一眼看出子对象的来源的好处。
olqngx592#
除了ikegami already shows之外,还有另一种方法可以使用。不要导入,而是完全指定您想要的:
use Cwd (); # import nothing my $dir = Cwd::getcwd();
如果人们知道函数可以来自不同的来源,但不记得您选择了哪一个,这可能会很有帮助。
2条答案
按热度按时间wfsdck301#
实际上,Cwd和POSIX都默认导出
getcwd
。解决方案是仅导入所需的符号。
如果您始终采用这种显式列出导入的风格,您将获得能够一眼看出子对象的来源的好处。
olqngx592#
除了ikegami already shows之外,还有另一种方法可以使用。不要导入,而是完全指定您想要的:
如果人们知道函数可以来自不同的来源,但不记得您选择了哪一个,这可能会很有帮助。