2

ディレクトリ内のディレクトリまたはファイルの名前を取得し、それらを可能な限り最小限のコードで配列に入れることに挑戦しようとしています。パーツは揃ったけど組み立てられない

パールグロブ:<path/to/dir/*>

正規表現の置換:s/.+\///

私がそれがうまくいくと思った方法への私の不自由な試み:

my @flist = <path/to/dir/*>
s/.+\/// for @flist;

しかし、そうではないと思います。

perl マスターからの助けはほとんどありませんか?

グラシアス!

編集:上記のコードにはセミコロンが必要だったと思います。N00b 間違い。ごめん!技術的にはまだ2行ですが。

4

5 に答える 5

5
@flist = map basename($_), @flist;

また

$_ = basename($_) for @flist;

行数はあなたにとって重要なので、以下は、あなたが求めた行とあなたがすでに持っている行をうまく組み合わせたものです:

my @flist =  map basename($_), <path/to/dir/*>;
于 2012-04-19T17:27:18.807 に答える
2

あなたのコードは少し粗雑ですが、機能しているようです。File :: Basename(コアモジュール)など、パスを削除するためのモジュールの使用を検討することもできます。さらに簡単な方法は、パスがまったく含まれていないことを確認することです。

dirに移動して、そこでglobを使用するだけです。その後、作業ディレクトリが変更されることを忘れないでください。

chdir "/path/to/dir";
my @flist = <*>;

opendirとを使用することもできますreaddirglobこれにより、非表示のファイルを含め、より多くのファイルが返されることに注意してください。

opendir my $dh, "/path/to/dir" or die $!;
my @flist = readdir $dh;
于 2012-04-19T17:15:41.950 に答える
2

必要なのはそれだけだと思います

my @flist = map m|([^/]+)$|, <path/to/dir/*>;
于 2012-04-19T19:26:32.433 に答える
1

すべての隠しファイル (ドットとドットドットを含む) が必要な場合は、次のようにします。

chdir /mypath or die "$!\n";
my @list = glob(".* *");

グロブを見る

目的のディレクトリに変更したため、パスなしでファイル名のみが報告されます。dot および dot-dot ファイルのレポートをスキップして、他の非表示 (ドット) ファイルを表示するには、次のようにします。

for (@list) {
    next if m{^\.\.?$};
    print "$_\n";
}
于 2012-04-19T17:27:22.330 に答える
0
my @flist=glob('/usr/include/*.h');
s/.*\///g for @flist;
print join ("\n",@flist);
于 2012-04-20T18:17:01.120 に答える