0

我正在尝试/temp/bin/usr/从变量中提取

$path  = /temp/bin/usr/... 

使用 perl。有人可以帮我吗?

4

3 回答 3

3

使用File::Basename. 它是 Perl 版本 5 中的核心模块。从文档中

use File::Basename;

($name,$path,$suffix) = fileparse($fullname, @suffixlist);
$name = fileparse($fullname, @suffixlist);

$basename = basename($fullname, @suffixlist);
$dirname  = dirname($fullname);

这听起来像是dirname($path)你所追求的。

您也可以简单地使用正则表达式

$path =~ s/\.+$//;
于 2013-03-05T15:53:23.720 回答
1

如果你需要的只是删除那些'..',最后有很多方法。

例如:

1)

my $str="/temp/bin/usr/..."; 
($str) =~ s/\.+$//; 
print $str;

2)

my $str="/temp/bin/usr/..."; 
$str = substr($str, 0, index($str, "."));
print $str;

3)

my $str="/temp/bin/usr/..."; 
$str = (split /\./, $str)[0];
print $str;

还有更多!

于 2013-03-05T16:07:51.010 回答
1

要提取路径的一部分,例如前三个目录,一种方法是使用splitdirmodule的方法File::Spec,例如:

printf "%s\n", join q|/|, (File::Spec->splitdir( $path ))[0..3];

如果要删除这些点,请在最后一个斜杠后使用与它们匹配的正则表达式,例如:

$path =~ s|(/)\.+\s*$|$1|;
于 2013-03-05T16:04:16.220 回答