4. perl/ファイルの先頭の文字列をチェック

 
4.1 ファイルの先頭の文字列をチェック

4.1 ファイルの先頭の文字列をチェック

 やりたかったのは、このサイトの html ファイルで、先頭行が <!DOCTYPE html> になっていないファイルがあるので、それを抽出したかっただけ・・・。
#!/usr/local/bin/perl
use strict;

my $root = $ARGV[0];;
my $filelist = &get_files($root);

foreach my $name (sort(@$filelist))
{
	my $result = check($name);

	if ($result)
	{
		print "$name \n";
	}
}

sub get_files
{
	my $dir = shift;
	my $filelist = shift;

	opendir (DIR, "$dir");
	my @list = grep /^[^\.]/, readdir DIR;
	closedir DIR;

	foreach my $file (@list)
	{
		if (-d "$dir/$file")
		{
			$filelist = &get_files("$dir/$file", $filelist);
		}
        else
		{
			push @$filelist, "$dir/$file";
		}
	}

	return $filelist;
}

sub check
{
	my $name = shift;
	my $check = undef;

	my @array = split(/\./, $name);
	my $extension = $array[$#array];

	if ($extension ne 'html')
	{
		return undef;
	}

	open(IN, "< $name");													#	読込オープン
	my $read = <IN>;
	close(IN);															#	クローズ

	if ($read !~ /^<!DOCTYPE html>/)
	{
		$check = 1;
	}

	return $check;
}

 いつか機会があれば、解説を書きますが、とてもサンプルにはならないなぁ。
 関数は pm にして、汎用的にすべきだし・・・。

 でもまぁ

> ./ファイル.pl ディレクトリ

 で動作しますよ。