EPS Solidizer
カレントフォルダのEPSファイルを全て実線化するperlコード
#!/usr/bin/perl
use strict;
use warnings;
#以上おまじない
#ファイル出入力モジュール
use IO::File;
#パッケージ宣言(cf.名前空間)
package epsfix;
$epsfix::ext = "eps"; #拡張子
#カレントディレクトリの.epsファイルを検索し、そのリストを@targetに代入
my @target = glob("*.$epsfix::ext");
my $targetnum = $#target+1; #全epsファイル数
my $donenum=0; #処理対象ファイル数
foreach my $path (@target){ #リストアップされたepsファイルを1つずつ処理する
my $epsfile = IO::File->new($path,'r') or die $!; #対象を読み込みモードでオープン
my $undone = 0; #フラグ
my $output = "";#出力用文字列
while (my $line =$epsfile->getline){ #対象から1行読み込んで$lineに代入
#パターンマッチング
if($line=~m/\Solid/){ #"\Solid"という文字列を含む行か?
if($line=~m/true/i){ #"true"という文字列を含む行か?
print STDERR "$path is done.\n";
last; #もう実線化されているのでそれ以上なにもしない
}else{
$undone = 1;
$line=~s/false/true/i; #"false"を"true"に置換する
print STDERR "processing $path...\n";
}
}
$output .= $line;
}
$epsfile->close;
unless($undone) {next};
++$donenum;
$epsfile = IO::File->new($path,'w') or die $!; #対象を書き込みモードでオープン
$epsfile->print($output); #書き込み
$epsfile->close;
}
print "$donenum of $targetnum files were processed.";