1

私はこのようなパスを持っています

/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("/");    
  }
 }

しかし、うまくいきませんでした。したがって、私を助けてください。

4

2 に答える 2

6

パスが$curdir含まれている場合、おそらく次を使用します。

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

Unix っぽいシステムで。または、 and を使用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

于 2013-02-09T06:54:52.570 に答える
0

splitの最初の結果は、渡された正規表現の最初のインスタンスの前の文字列になります。ここでは先頭に「/」があるため$home_dir、「user」$user_dirなどに空の文字列が表示されます。リスト割り当ての最初の位置に追加undefするか、先頭のスラッシュを最初に削除します。

また、ここで渡さずに split を呼び出せるかどうかもわかりません$curdir。試す:

(undef, $home_dir, $user_dir, $doc_dir, $loc_dir) = split("/", $curdir);
于 2013-02-09T06:53:34.177 に答える