3

パスの冗長性を取り除く必要があるプログラムを書いています。

a/b/.. -> a
a//b   -> a/b
a/./b  -> a/b

これを行う既存のモジュールはありますか?

更新: この正規化/正規化はRFC 3986で説明されています。パスセグメントの正規化部分だけが必要です。

もちろん、これは実装が簡単です。すでにいくつかのモジュールにパッケージ化されているかどうかはまだ疑問です。

4

1 に答える 1

1

フォームのパスや、URL の階層内の要素の意味や関係は、標準では規定されていません。サーバーによっては、階層がまったく存在しない可能性があります。分割された要素は/位置として扱われるか、順序がまったく意味をなさない可能性があります。そのため、URL のタスクを処理する特定のモジュールはありません。

ただし、ターゲット サーバーがどのように機能するかについて完全に確信がある場合は、必要に応じて簡単に変更できFile::Specます。URL からパスを抽出し (たとえば を使用URI)、それをファイル パスとして処理し、元に戻します。

ファイルシステムで通常のファイル名を使用するというコメントを考慮すると、パスから何も抽出する必要さえありません-File::Specすべてのニーズに十分です。

File::Spec(設計上) を解決しないで回避したい場合は、それを..使用splitpathして名前のディレクトリ部分を抽出し、ディレクトリsplitdirに分割してから、その配列を反復処理し、splice遭遇するたびに 2 つの要素を処理し..ます。catdirとを使用して、catfile結果をパックします。

于 2012-08-28T09:39:03.290 に答える