在perl中获取相对于主目录的路径

在perl中获取相对于主目录的路径,perl,Perl,对于这个问题,我找到了一个解决方案,但我正在寻找替代方案。 假设我在目录中 /home/user/testA/testB 我的主目录是/home/user,如何获取当前目录相对于主目录的路径?即:testA/testB 我尝试了以下方法: use Cwd qw(getcwd); use Env qw(HOME); my $cdir=getcwd; my $p=$cdir=~s{^\Q$HOME\E/}{}r; 这似乎奏效了。我的问题是,是否有一个CPAN模块来实现这一点?最接近我的是Fil

对于这个问题,我找到了一个解决方案,但我正在寻找替代方案。 假设我在目录中

/home/user/testA/testB
我的主目录是
/home/user
,如何获取当前目录相对于主目录的路径?即:
testA/testB

我尝试了以下方法:

use Cwd qw(getcwd);
use Env qw(HOME);

my $cdir=getcwd;
my $p=$cdir=~s{^\Q$HOME\E/}{}r;

这似乎奏效了。我的问题是,是否有一个CPAN模块来实现这一点?最接近我的是
File::Spec::Functions qw(abs2rel)
,但它只给了我
。/..
。。也许我错过了什么

对于我来说,使用
File::Spec

#!usr/bin/perl

use File::Spec;

$base = '/home/user';
$path = '/home/user/testA/testB';

my $rel_path = File::Spec->abs2rel( $path, $base );
print($rel_path);
输出:

testA/testB

使用:


如果cwd是
/usr/bin
,home dir是
/home/user
,您希望显示什么作为输出?@devnull不确定,我实际上没有考虑过这种情况。。在这种情况下,它可能会返回
undef
?如果您希望在这种情况下返回
undef
,那么您当前的方法似乎可以。实际上,您需要路径的子字符串。请参阅,谢谢,它可以工作!我想我一定把参数的顺序弄混了。如果我更改顺序:
abs2rel($base,$path)
我得到
。/..
。欢迎。对这看起来是正确的。正是参数的变化赋予了值
。/…
#!/usr/bin/perl
use warnings;
use strict;

use Path::Tiny;

my $base = '/home/user';
my $path = '/home/user/testA/testB';

my $relative = path($path)->relative($base);
print "$relative\n";