在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";