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

 
2.1 ファイルをリスト
2.2 使用方法

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");

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

	foreach my $file (@list)
	{
		#	ディレクトリの場合は再帰検索を行う

		if (-d "$root$file")
		{
			$filelist = $self->get("$root$file/", $ext, $filelist);
			next;
		}

		#	ファイルの場合は拡張子が txt ならばリストする

		if ($file =~ /$ext$/)
		{
			push @$filelist, "$root$file";
		}
	}

	return $filelist;
}

1;
 5~27行は、ドキュメントなので説明しません。  31~36行は、コンストラクタです。  38~65行が、実際の処理。  67行は、おまじないで、これがないと実行時にエラーになります。

2.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 のファイルをリストして表示します。