perl - クラスライブラリ - ファイルをリスト

 クラウディア
1. ファイルをリスト
2. 使用方法

1. ファイルをリスト

 ファイルをリストするモジュールを作ってみました。  ファイル名を FileList.pm としています。
#
package FileList;

=encoding utf8

=head1 NAME - 名称

FileList - ファイルリストクラス

=head2 SYNOPSIS - 使い方

use FileList;

$list = FileList->new();

$filelist = $list->get(ディレクトリ, 拡張子);

=head1 更新履歴

新規:2018-01-09 ShowKit

=head2 Copyright

Copyright (C) 2018-01-09 Show.Kit by SingNet

=cut

use strict;

sub new
{
    my ($class) = @_;
    my $self = {};
    return bless($self, $class);;
}

sub get
{
    my ($self, $root, $ext, $filelist) = @_;
    opendir(DIR, $root) or die("Can't get directory.:$root($!)");

    my @list = grep /^[^\.]/, readdir DIR;
    closedir DIR;

    foreach my $file (@list)
    {

        if (-d "$root$file")                        #   ディレクトリの場合は再帰検索を行う
        {
            $filelist = $self->get("$root$file/", $ext, $filelist);
            next;
        }

        if ($file =~ /$ext$/)                       #   ファイルの場合は指定した拡張子と一致するならばリストする
        {
            push @$filelist, "$root$file";
        }
    }

    return $filelist;
}

1;

 4~26行は、ドキュメントなので説明しません。  30~35行は、コンストラクタです。  37~61行が、実際の処理。  63行は、おまじないで、これがないと実行時にエラーになります。

2. 使用方法

 使用時には、メインで(ファイル名を「main.pl」としておきます)

#!/usr/local/bin/perl

BEGIN
{
    use lib './';
};

use strict;
use FileList;

sub main
{
	my @argv = @_;
	my $root = $argv[0];

	my $list = FileList->new();

	my $filelist = $list->get($root, 'txt');

	foreach my $name (sort(@$filelist))
	{
		print $name . "\n";
	}
}

main(@ARGV);
 てな記述をしておいて

perl ./main.pl ./
 と実行すると、カレントディレクトリ以下の、拡張子「.txt」のファイルをリストして表示します。
earthcar(アースカー)