我有这样的路径
/home/user/doc/loc
我想分别提取home,user,doc,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("/");
}
}
但它没有用;因此,请帮助我。
答案 0 :(得分:4)
鉴于包含路径的$curdir
,您可能会使用:
my(@names) = split m%/%, $curdir;
在Unix-ish系统上。或者您可以使用File::Spec
和splitdir
。例如:
#!/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 :(得分:-1)
split
的第一个结果将是传递给它的正则表达式的第一个实例之前的字符串。由于此处有一个前导“/”,您将在$home_dir
中找到一个空字符串,在$user_dir
中找到'user',依此类推。将undef
添加到列表分配的第一个位置,或者首先修剪前导斜杠。
此外,我不确定你是否可以在不传递$curdir
的情况下调用split。尝试:
(undef, $home_dir, $user_dir, $doc_dir, $loc_dir) = split("/", $curdir);