#!/usr/local/bin/perl #!D:/Perl/bin/perl.exe # *** Perlソースリストのコメントを削除するPerlスクリプト *** Rev.1.000 # ファイル名:PerlCommentCut.cgi # 作成:鷹の巣 URL:http://sakaguch.com/ 電子メール:http://sakaguch.com/cgi/postmail/ より送信して下さい。 # $content = 'perlは、起動時、CPUに負担をかけるので、精神衛生上作成しました。'; # Perlの練習用として作成しましたので、簡単な判断しかしていません。(安全第一です。) # 先頭行が#や;#で始まる行だけをコメント行として認識し、コメント行を削除します。 # これ以外のパターンのコメント削除は、ご使用者の改造におまかせします。 # 大体、1割程度はファイルサイズが小さくなる予定です。 # 元のファイル名には、.source.cgiを付加して、初回だけバックアップを行っています。 # 元のファイル名が、xxx.plであっても.source.cgiが付加されます。 # .source.cgiを付加したファイルが存在する場合は、このバックアップファイルの更新を行いません。 # # 2001.11.15 Rev.0.0.0 初版(perlは、起動時、CPU(celeon 300A)に負担をかけるので、気分的に作成) # 2002.08.12 Rev.0.0.1 コマンドラインからの起動をCGIに変更。 # 2002.10.11 Rev.0.0.2 HTML 4.01 strictに対応。 # 2002.11.24 Rev.1.000 公開(ブラウザIE6とNN7.0の文字化け対策の為、コメントを変更。) # # 起動方法:コマンドラインより、perl PerlCommentCut.cgiと入力するか #      http://example.com/cgi-bin/PerlCommentCut.cgi等とWebサーバーから実行します。 # # 注)1.コメントを削除するとソースが全く読めなくなりますので、バックアップファイルは、大切に保管して下さい。 #   2.初回だけバックアップファイルが作成されます。 #    以後、このバックアップファイルより、コメントのないperlスクリプトが生成されます。 #   3.従って、perlのソースを変更する場合は、バックアップファイルを変更して、 #    再度、このスクリプトを起動して、コメントのないperlスクリプトを生成して下さい。 #   4.また、バックアップファイルの内容がWebサーバーを通して読まれない様、十分、ご注意願います。 #    (基本的には、Webサーバーの実行パス下に設置されていることを想定しています。) # #------------# # 基本設定 # #------------# # 実行時のみ、コメント行にします。通常は、起動しない(されない)様にすること。!!! #exit; # コメント削除しない先頭行数の設定(Windowsでは、0でも可。通常1以上のこと) #$SkipLineNum = 1; # タブキーの削除設定(0:削除しない、1:削除する)###jcode.plの様な区切り符号にタブを使用しているものに使用しないこと。### #$FlagTabDel = 1; # 不要改行の削除設定(0:削除しない、1:削除する)###削除すると動かないCGIがありました。### #$FlagLfDel = 0; # 対象ファイルの設定 ###絶対パスかhttpドキュメントルートからのファイル名を指定します。### @SourceFile = ( # 書式→ '$SkipLineNum<>$FlagTabDel<>$FlagLfDel<>$SourceFile<>', # '1<>0<>1<>/cgi/bbs/jcode.pl<>', # KENT WEBの同梱スクリプト # '1<>1<>1<>/cgi/bbs/fold.pl<>', # KENT WEBのWeb Forum同梱スクリプト # '1<>1<>1<>/cgi/bbs/wf_admin.cgi<>', # KENT WEBのWeb Forum CGI # '1<>1<>0<>/cgi/bbs/wf_init.cgi<>', # '1<>1<>1<>/cgi/bbs/wf_regi.cgi<>', # '1<>1<>1<>/cgi/bbs/<>', # '1<>1<>0<>/cgi/calen/calender.cgi<>', # KENT WEBのWeb Calen CGI # '1<>1<>1<>/cgi/calen/login.cgi<>', # KENT WEBのLOG IN CGI # '1<>1<>1<>/cgi/count/dayx.cgi<>', # KENT WEBのDAY COUNTER-EX CGI # '1<>1<>1<>/cgi/count/dayxmgr.cgi<>', # '1<>1<>1<>/cgi/count/gifcat.pl<>', # KENT WEBのDAY COUNTER-EX同梱スクリプト # '1<>1<>1<>/cgi/enq/enq.cgi<>', # KENT WEBのWEB ENQUETE CGI # '1<>1<>1<>/cgi/fantasy/fantasy.cgi<>', # KENT WEBのFantasy Board CGI # '1<>1<>1<>/cgi/linkvp/linkvp.cgi<>', # KENT WEB&我楽多cgi@niftyのLinkVisor Plus! CGI # '1<>1<>1<>/cgi/report/replist.cgi<>', # KENT WEBのAccess Report CGI # '1<>1<>1<>/cgi/report/report.cgi<>', '', ); #------------# # HTML設定 # #------------# $title = 'Perlソースリストのコメント行削除'; $content = '実行時に不要なPerlソースリストのコメント行の削除を行います。'; $keyword = 'Perl,ソースリスト,コメント行削除'; # 管理者名とメールアドレス $webmaster = '管理者名'; $mailaddress = 'webmaster@example.com'; $prev = '/index.html'; $next = ''; # 掲示板上部に挿入するリンク $UpperBanner = <<'_MSG_';

目次更新履歴100の質問ご訪問客帳掲示板投票リンク集雑学忘備録アクセス解析

_MSG_ $DateSakusei = ''; #------------# # 設定完了 # #------------# &main; exit; #----------# # 主回路 # #----------# sub main { &header ($title, $content, $keyword, $mailaddress, $prev, $next, $UpperBanner, $DateSakusei); print '以下のファイルのコメント行の削除が完了しました。元のソースファイル名には、末尾に.source.cgiを追加しています。
'."\n"; print '動作試験を行って不具合が発生した場合は、ソースファイル(末尾に.source.cgiを追加)を元ファイル名に戻すと復旧します。
'."\n"; foreach (@SourceFile) { if ($_ ne '') { ($SkipLineNum, $FlagTabDel, $FlagLfDel, $SourceFileName) = split(/<>/, $_); print $SkipLineNum+1; print "行以降のコメント行を削除(タブキーの削除:"; if ($FlagTabDel) { print "有"; } else { print "無"; } print "、不要改行の削除:"; if ($FlagLfDel) { print "有"; } else { print "無"; } print "、ファイル名:$SourceFileName
\n"; $SourceFile = "$SourceFileName\.source\.cgi"; if (!(-e "$SourceFile")) { # $SourceFileファイルが存在しなければ、 rename($SourceFileName, "$SourceFile"); } $DistFile = $SourceFileName; &CommentCut ($SourceFile, $DistFile, $SkipLineNum, $FlagTabDel, $FlagLfDel); } } &footer; } #----------------------# # コメント行削除処理 # #----------------------# sub CommentCut { my ($fileIN, $fileOUT, $SkipLineNum, $FlagTabDel, $FlagLfDel) = @_; my ($LineCount, @new, $SourceList, @SourceList); open(IN,"$fileIN") || &error("Can't open IN $fileIN"); @SourceList = ; close(IN); $LineCount = 0; @new = (); foreach $SourceList (@SourceList) { chomp($SourceList); $LineCount++; if($LineCount > $SkipLineNum){ $SourceList =~ s/^\s+//; # 行頭空白削除 $SourceList =~ s/\s+$//; # 行末空白削除 # タブキーの削除 if ($FlagTabDel) { $SourceList =~ s/\t//g; } # コメント行の削除 if (($SourceList =~ /^#/ ) or ($SourceList =~ /^;#/ )) { $SourceList=""; } # 不要改行の削除 if ($FlagLfDel && ($SourceList eq "")) { next; } } push (@new , "$SourceList\n"); } open(OUT,">$fileOUT") || &error("Can't open OUT $fileOUT"); print OUT @new; close(OUT); } #--------------# # エラー表示 # #--------------# sub error { print "ERROR - $_[0]\n"; } #------------------# # HTMLのヘッダー # #------------------# sub header { my ($title, $content, $keyword, $mailaddress, $prev, $next, $UpperBanner, $DateSakusei) = @_; $head_flag = 1; if (!$DateSakusei) { ($sec, $min, $hour, $day, $mon, $year, $wday) = localtime(time()); $DateSakusei = "作成日:" . sprintf("%04d年%02d月%02d日",$year+1900,$mon+1,$day); } print "Content-type: text/html\n\n"; print <<"_MSG_"; $title
$UpperBanner$DateSakusei$content

$title

_MSG_ } #------------------# # HTMLのフッター # #------------------# sub footer { print <<"_MSG_";
目次▲頁先頭

_MSG_ }