challenge 擬似lsの実装

スラッシュで区切られた文字列の配列(以下パスリスト)がある。
このパスリストにたいして擬似的なlsを行いたい。
lsはパスリストと表示対象ディレクトリのパスを入力する。

例としては以下のようになる。
pathList = ["aaa/bbb","aaa/ccc","aaa/ddd/eee","bbb/ddd/eee"]

ls(pathList,"aaa/")
>["bbb","ccc","ddd/"]

ls(pathList,"aaa/ddd/")
>["eee"]

なおパスリストが大きくなったとき、速度がなるべく低下しないように実装するのが望ましい。
文字列は任意の文字コードであると仮定してかまわない。

Posted feedbacks - Perl

あえて木構造とかを作らず、そのまま正規表現で処理してみた。

Dan the Regular Expressionist

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/local/bin/perl
use strict;
use warnings;
sub pls{
    my $where = shift;
    my @list  = @_;
    $where =~ s,/?\z,/,o;
    my $pat = qr/\A\Q$where/;
    map { s/$pat//; s,/.*,,; $_ } grep /$pat/, @list;
}

if (__FILE__ eq $0){
    local $\ = "\n";
    local $, = ", ";
    my @pathList = ("aaa/bbb","aaa/ccc","aaa/ddd/eee","bbb/ddd/eee");
    print pls("aaa/", @pathList);
    print pls("aaa/ddd", @pathList);
}

Index

Feed

Other

Link

Pathtraq

loading...