gpt4 book ai didi

perl - 在多个模块中使用 FindBin

转载 作者:行者123 更新时间:2023-12-04 16:40:57 28 4
gpt4 key购买 nike

这是场景,我有两个文件:
1. 目录/A.pm
2. 目录/new_dir/a.t

这就是 A.pm 的样子:

package A;
use FindBin;
use Test::More;
is (FindBin->again, 'dir', 'got dir');
1;

这是 a.t 的样子:
use FindBin;
use Test::More qw(no_plan);
use A;
is (FindBin->again, 'dir/new_dir', 'got dir/new_dir');

所以我用 perl new_dir/a.t 运行文件 a.t 并希望我的测试通过。但这是我的测试结果:
not ok 1 - got dir
# Failed test 'got fir'
# at A.pm line 6.
# got: 'dir/new_dir'
# expected: 'dir'
ok 2 - got dir/new_dir
1..2

我做错什么了吗?我对 perl 很陌生。请帮忙!!

最佳答案

Dave Sherohman notes , FindBin 用于查找主脚本的位置,而不是单个模块。从文档中:

NAME
FindBin - Locate directory of original perl script

(诚​​然,文档确实在“已知问题”部分中引用了“模块”,这有点令人困惑,但这并不真正意味着您认为它的含义。)

无论如何,如果你用 perldoc -m FindBin 查看源代码,您会看到 FindBin 从 $0 获取脚本的路径。多变的。如果您有兴趣查找通过 use 包含的模块的位置(或 require ),您应该查看 %INC相反,是这样的:
package Foo::Bar;
use File::Spec;
my ($vol, $dir, $file) = File::Spec->splitpath( $INC{'Foo/Bar.pm'} );

关于perl - 在多个模块中使用 FindBin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7685583/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com