perl 2个不同CPAN模块中具有相同名称的子程序

mwyxok5s  于 2023-03-19  发布在  Perl
关注(0)|答案(2)|浏览(175)

我在运行perl时遇到此错误:
[Thu 2023年3月16日00:24:23]列表目录1. cgi:子例程main::getcwd在/usr/lib/cgi-bin/list_directory_1.cgi第15行重新定义。
我认为这是因为getcwd在CPAN模块CwdPOSIX中定义,我如何指定这个子例程是从Cwd模块中获取的?

wfsdck30

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.

如果您始终采用这种显式列出导入的风格,您将获得能够一眼看出子对象的来源的好处。

olqngx59

olqngx592#

除了ikegami already shows之外,还有另一种方法可以使用。不要导入,而是完全指定您想要的:

use Cwd ();  # import nothing

my $dir = Cwd::getcwd();

如果人们知道函数可以来自不同的来源,但不记得您选择了哪一个,这可能会很有帮助。

相关问题