2013-03-05 17 views
0

解压路径我试图从用perl变量如何从与其他字符变量在Perl

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

提取/temp/bin/usr/。 有人可以帮我吗?

+1

你尝试过什么吗?如果是这样,请包含您的代码。 – 2013-03-05 15:53:01

+0

这是完整路径还是文件路径的一部分? '/ temp/bin/usr/somedir/dir3/file.txt'或'/ temp/bin/usr/file.txt'?有一个区别。 – TLP 2013-03-05 15:56:43

+0

其简单/临时/ bin/usr/...,我需要删除这些点 – Dcoder 2013-03-05 15:58:01

回答

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; 

,这儿有很多更多!

+0

'split'和'index'将失败,如'/foo/.bar/...'路径。 – TLP 2013-03-05 16:18:27

+0

同意,但OP没有提及的模式可能会有所不同。 – varnie 2013-03-05 16:27:13

3

使用File::Basename。这是Perl版本5核心模块从the documentation

use File::Basename; 

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

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

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

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

$path =~ s/\.+$//; 
1

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

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

如果你想删除这些点,使用最后一个斜线之后匹配他们,就像一个正则表达式:

$path =~ s|(/)\.+\s*$|$1|; 
+0

'0 .. 2'为三个元素。好的解决方案,但我会在我的答案中引用它。 – TLP 2013-03-05 16:06:30

+0

我的错误,OP意味着别的..我不会引用它。还是一个很好的答案。 – TLP 2013-03-05 16:11:38

+0

@TLP:我也不确定,所以我添加了两种不同的方式来完成这样的任务。我认为由于他得到的答案,OP不会有太多问题来解决他的问题。 – Birei 2013-03-05 16:19:11

相关问题