[英]How to extract directory names from a path in Perl
我有這樣一條路
/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("/");
}
}
但這沒有用; 因此,請幫助我。
給定$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";
}
Ouput(包括前導空白行):
home
user
doc
loc
File::Spec->splitdir()
home
user
doc
loc
split
的第一個結果將是傳遞給它的正則表達式的第一個實例之前的字符串。 由於這里有一個前導“ /”,因此您將在$home_dir
得到一個空字符串,在$user_dir
得到“ user”,依此類推。 將undef
添加到列表分配的第一個位置,或者先修剪一個斜杠。
另外我不確定是否可以在不傳遞$curdir
情況下調用split。 嘗試:
(undef, $home_dir, $user_dir, $doc_dir, $loc_dir) = split("/", $curdir);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.