blog/content/post/2008-03-13-『新版perl言語プログラミング...

8.6 KiB

title author date url wordtwit_post_info categories
『[新版Perl言語プログラミングレッスン入門編』第11章 ファイル操作・途中 kazu634 2008-03-13 /2008/03/13/_903/
O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3823;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}
Perl
Programming

 今日はファイル操作だよー。

カレントディレクトリのファイルを一覧で表示する

use strict;
use warnings;
my $dirname = ".";
opendir(DIR, $dirname) or die "$dirname: $!";
while (my $dir = readdir(DIR)) {
print $dir, "\n";
}
closedir(DIR);

カレントディレクトリ内にある特定の拡張子のファイルを一括して処理

こんな感じがお約束らしい。

use strict;
use warnings;
# 変数の宣言
my $hline = '=-' x 30 . "\n";
my $dirname = '.';
# カレントディレクトリを開く
opendir(DIR, $dirname) or die "$dirname: $!";
# カレントディレクトリのファイルを逐一チェックして処理を行う
while (my $dir = readdir(DIR)) {
# 普通のファイルじゃなければ、次のファイルチェックする
next unless (-f $dir);
# ファイルの拡張子が「.html」じゃなければパスして、次のファイルへ
next unless ($dir =~ /\.html$/);
# 処理するファイルの表示
print $hline;
print $dir, "\n";
print $hline;
# 実際にファイルを開いて、中身を表示する
open(FILE, '$dir') or die "$!";
while (my $line = <FILE>) {
print $line;
}
close(FILE);
}
# ディレクトリを閉じる
closedir(DIR😉

サブディレクトリも再帰的に呼び出すことで作業できるようにする

use strict;
use warnings;
&traverse('.');
sub traverse {
# 引数を$dirnameに代入
my $dirname = shift;
# パスの区切り文字を指定
my $delim = '/';
# ディレクトリを開いて、一つ一つ処理
opendir(DIR, $dirname) or die "$dirname: $!";
foreach my $entry (readdir(DIR)) {
# カレントディレクトリだったらパス
next if ($entry eq '.');
# 親ディレクトリだったらパス
next if ($entry eq '..');
# $dirnameの最後が「/」or「\」だったら、区切り文字をnullに
if ($dirname =~ /[\/\\]$/) {
$delim = '';
}
# 表示
my $filename = "$dirname$delim$entry";
print $filename, "\n";
# ディレクトリなら再帰的にtraverseを呼び出す
if (-d $filename) {
&traverse($filename);
} else {
ここで処理したい内容を書く!
}
}
}