Net::FTP
パッケージを使用していると仮定します。それから、ドキュメントのこの部分は興味深いです:
ls ( [ DIR ] )
DIR のディレクトリ リスト、または現在のディレクトリを取得します。
配列コンテキストでは、サーバーから返された行のリストを返します。スカラー コンテキストでは、リストへの参照を返します。
つまり、このメソッドを引数なしで呼び出すと、現在のディレクトリからすべてのファイルのリストが取得されます。それ以外の場合は、指定されたディレクトリから取得されます。
驚くべきことではありませんが、パターンについての言葉はありません。FTP はファイルを転送するための単なるプロトコルであり、このモジュールはそのプロトコルのラッパーにすぎません。
次の方法で簡単にフィルタリングを行うことができますgrep
。
my @interesting = grep /pattern/, $ftp->ls();
文字シーケンスを含むすべてのファイルを選択するにはmyname
、 を使用しますgrep /myname/, LIST
。
文字シーケンスを含むすべてのファイルを選択するには.myname.
、 を使用しますgrep /\.myname\./, LIST
。
文字シーケンス で終わるすべてのファイルを選択するには.txt
、 を使用しますgrep /\.txt$/, LIST
。
LIST
は、または別の grepのいずれかである$ftp->ls
ため、複数のフィルタリング手順を簡単に連鎖させることができます。
もちろん、Perl 正規表現はそれよりも強力であり、正確な要件/\.myname\.[^.]+\.txt$/
に応じて、単一または何かですべてのフィルタリングを実行できます。グロビング構文がどうしても必要な場合は、グロブ パターンを などの正規表現オブジェクトに変換したり、直接グロブ マッチングを行うツールがあります。Text::Glob
use Text::Glob qw(match_glob);
my @interesting = match_glob ".*.myname.*.txt", $ftp->ls;
ただし、正規表現ははるかに強力であり、学ぶ価値があるため、控えめに言っても、それは洗練されていません。