パスの冗長性を取り除く必要があるプログラムを書いています。
a/b/.. -> a
a//b -> a/b
a/./b -> a/b
これを行う既存のモジュールはありますか?
更新: この正規化/正規化はRFC 3986で説明されています。パスセグメントの正規化部分だけが必要です。
もちろん、これは実装が簡単です。すでにいくつかのモジュールにパッケージ化されているかどうかはまだ疑問です。
パスの冗長性を取り除く必要があるプログラムを書いています。
a/b/.. -> a
a//b -> a/b
a/./b -> a/b
これを行う既存のモジュールはありますか?
更新: この正規化/正規化はRFC 3986で説明されています。パスセグメントの正規化部分だけが必要です。
もちろん、これは実装が簡単です。すでにいくつかのモジュールにパッケージ化されているかどうかはまだ疑問です。
フォームのパスや、URL の階層内の要素の意味や関係は、標準では規定されていません。サーバーによっては、階層がまったく存在しない可能性があります。分割された要素は/
位置として扱われるか、順序がまったく意味をなさない可能性があります。そのため、URL のタスクを処理する特定のモジュールはありません。
ただし、ターゲット サーバーがどのように機能するかについて完全に確信がある場合は、必要に応じて簡単に変更できFile::Spec
ます。URL からパスを抽出し (たとえば を使用URI
)、それをファイル パスとして処理し、元に戻します。
ファイルシステムで通常のファイル名を使用するというコメントを考慮すると、パスから何も抽出する必要さえありません-File::Spec
すべてのニーズに十分です。
File::Spec
(設計上) を解決しないで回避したい場合は、それを..
使用splitpath
して名前のディレクトリ部分を抽出し、ディレクトリsplitdir
に分割してから、その配列を反復処理し、splice
遭遇するたびに 2 つの要素を処理し..
ます。catdir
とを使用して、catfile
結果をパックします。