簡體   English   中英

如何從Perl中的路徑提取目錄名稱

[英]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::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";
}

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM