2013-02-09 20 views
0

解压目录名我有这样如何从一个路径在Perl

/home/user/doc/loc 

我想单独提取家里,用户文档,LOC的路径。我试过split (////)split("/") 但他们都没有工作。请给我示例脚本:

while (<EXPORT>) { 
if (/^di/) { 
    ($key, $curdir) = split(/\t/); 
    printf "the current dir is %s\n", $curdir; 
    printf("---------------------------------\n"); 
    ($home_dir, $user_dir, $doc_dir, $loc_dir) = split("/");  
    } 
} 

但它没有工作;因此请帮助我。

+3

['文件:: Spec'(http://perldoc.perl.org/File/Spec.html)和'splitdirs'? – 2013-02-09 06:48:50

回答

4

鉴于$curdir包含路径,你可能会使用:

my(@names) = split m%/%, $curdir; 

Unix的十岁上下的系统上。或者你会使用File::Specsplitdir。例如:

#!/usr/bin/env perl 
use strict; 
use warnings; 
use File::Spec; 

my $curdir = "/home/user/doc/loc"; 
my(@names) = split m%/%, $curdir; 

foreach my $part (@names) 
{ 
    print "$part\n"; 
} 

print "File::Spec->splitdir()\n"; 
my(@dirs) = File::Spec->splitdir($curdir); 

foreach my $part (@dirs) 
{ 
    print "$part\n"; 
} 

输出继电器(包括前空白行):

 
home
user
doc
loc
File::Spec->splitdir()
 
home
user
doc
loc

-1

split的第一个结果将是传递给它的正则表达式的第一实例之前的字符串。由于您在此处有一个前导“/”,因此您将在$home_dir中获得一个空字符串,在$user_dir等中获得“用户”。将undef添加到列表作业的第一个位置,或者先修剪一个前导斜杠。

而且我不知道,如果你可以调用分裂没有传递给它$curdir这里。尝试:

(undef, $home_dir, $user_dir, $doc_dir, $loc_dir) = split("/", $curdir); 
+0

而不是“一次性值”,你可以使用'undef'作为左值。还应该注意的是,'split'的第一个参数是*不是一个字符串,而是一个正则表达式! – amon 2013-02-09 06:55:03

+0

好点。答案已更新。我以为我确实指出了这一点? – FoolishSeth 2013-02-09 06:57:00

相关问题