ルモーリン
ホーム 更新 Perl Sample サービス 雑談 鉄ゲタ Linux リンク 連絡先

Perlサンプル7 ファイル一覧を表示

2019-08-28

内容

決まったディレクトリ内のファイル一覧を表示します。

コード

#!/usr/bin/env perl

use v5.26;
use utf8;
use strict;
use warnings;

use Cwd;
use Encode::Argv;
use Encode::Locale;
use FindBin;

use open IO => ":utf8";
binmode STDIN, ":encoding(console_in)";
binmode STDOUT, ":encoding(console_out)";

$| = 1;

say "ディレクトリ変更前:" . Encode::decode locale_fs => getcwd();
# ディレクトリ名をデコードしてもエンコードして渡すからデコード/エンコードを省略
chdir $FindBin::Bin; # chdir Encode::encoode locale_fs => Encode::decode(locale_fs => $FindBin::Bin);
say "ディレクトリ変更後:" . Encode::decode locale_fs => getcwd();

use constant DIRNAME => "俺の嫁";
say for sort map {Encode::decode locale_fs => $_} glob Encode::encode locale_fs => DIRNAME . "/*.txt";

ファイルの準備

ディレクトリ「俺の嫁」の中にファイルを作ります。 一覧表示が目的なのでファイルの中身は空です。

実行結果

スクリプトと同じディレクトリから起動した場合です。

C:\data\PerlSample>perl perlsample_007.pl
ディレクトリ変更前:C:/data/PerlSample
ディレクトリ変更後:C:/data/PerlSample
俺の嫁/たこルカ1号.txt
俺の嫁/たこルカ2号.txt
俺の嫁/たこルカ3号.txt
俺の嫁/たこルカ4号.txt
俺の嫁/ルカ姐さん(大).txt
俺の嫁/ルカ姐さん(小).txt

他のディレクトリから起動した場合です。

C:\data>perl perlsample/perlsample_007.pl
ディレクトリ変更前:C:/data
ディレクトリ変更後:C:/data/perlsample
俺の嫁/たこルカ1号.txt
俺の嫁/たこルカ2号.txt
俺の嫁/たこルカ3号.txt
俺の嫁/たこルカ4号.txt
俺の嫁/ルカ姐さん(大).txt
俺の嫁/ルカ姐さん(小).txt

解説

use Cwd

現在のディレクトリを取得するのに使います。
Cwd - get pathname of current working directory - metacpan.org

use FindBin

スクリプトがあるディレクトリが$FindBin::Binに入っています。
FindBin - Locate directory of original perl script - metacpan.org

chdir

「カレントディレクトリを EXPR に移します。」
Perlの組み込み関数 chdir の翻訳 - perldoc.jp

glob

ファイルを検索します。
Perlの組み込み関数 glob の翻訳 - perldoc.jp

map

「LIST の個々の要素に対して、BLOCK か EXPR を評価し ($_ は、ローカルに個々の要素が設定されます) 、 それぞれの評価結果からなるリスト値が返されます。」
Perlの組み込み関数 map の翻訳 - perldoc.jp