如何使用dirname在perl中返回两级



我有一个存储在变量中的值

$var1="/home/PPP/Testing/dir2/file1";

这是我的linux系统中的一条真实路径。现在,使用$var1的值,我想提取$var2的值。

我想要"/家庭/PPP/测试";在CCD_ 3中。我不能将字符串值直接放在$var2中,因为$var1中的路径可能会有所不同。类似地,它($var1(可以是"/home/PPPP/Testing/dir2/file1"home/PPP/lnx/dir3/file4"home/PPPP/window62/dir24/file1";。

总之,我希望$var1中的路径返回两个级别,然后存储在$var2中。

我该怎么做?可以使用dirname完成吗?

提取路径一部分的方法是解析它,然后重新组装所需的内容。

对于解析,最简单的建议是为该工作提供一个库,比如核心文件::Spec

use File::Spec;
my @fqn = File::Spec->splitdir($var1);
my $var2 = File::Spec->catdir( @fqn[0..$#fqn-2] ); 

如果路径以/(按设计(开头,则splitdir返回一个空的第一个元素,并且由于您正想将这些元素连接回来,因此第一个空元素正是所需的。然后连接最后两个元素(要丢弃的文件名和一个目录(。变量CCD_ 11是数组CCD_ 12中最后一个元素的索引。

当然还有其他的图书馆,还有其他的方式。

可以通过/my @fqn = split m{/}, $var1手动分割路径,其中如果路径以/开始,则第一个元素也是空字符串。或者使用类似my @fqn = m{[^/]+}g的正则表达式(现在第一个元素不为空(。在这种情况下,我看不出这些比一个好的图书馆有任何优势。

下面是一个使用Path::Tiny执行此操作的示例。它不在核心Perl中,但它非常漂亮。

use Path::Tiny;
my $var1 = "/home/PPP/Testing/dir2/file1";
my $var2 = path($var1)->parent(2);

相关内容

  • 没有找到相关文章

最新更新