萌えPerl
しきり線
中項目 簡単な例
リファレンスたん

 地味なコマンドラインなんですが、じゃあ、何に使うの?ってことになりますね。
 例えばこういうのはどうでしょう。


1.test02.cgi というファイルをつくる。

2.以下を書き込む。
#!c:/perl/bin/perl
my @files = glob("*");
for my $file (@files){
  if($file=~/copypa/){
    open( COPY, "<$file" );
    my @data = <COPY>;
    for (@data){
      $_=~s/吉野家/秋葉原/g;
      $_=~s/150円引き/メイドのコスプレ/g;
    }
    open(OUT,"> $file");
    print OUT @data;
  }
}

3.copypa.txt というファイルを作る。

4.以下を書き込む。
そんな事より1よ、ちょいと聞いてくれよ。スレとあんま関係ないけどさ。
このあいだ、近所の吉野家行ったんです。吉野家。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。

5.実行する。
C:\moeperl>perl test01.cgi

6.copypa.txt を開いてみると以下のように書き変わっている。
そんな事より1よ、ちょいと聞いてくれよ。スレとあんま関係ないけどさ。
このあいだ、近所の秋葉原行ったんです。秋葉原。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか垂れ幕下がってて、メイドのコスプレ、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、メイドのコスプレ如きで普段来てない秋葉原に来てんじゃねーよ、ボケが。


解説。

my @files = glob("*");
で同フォルダー内にあるファイル名の一覧を取得します。

for my $file (@files){
でその一つ一つを見ていって

if($file=~/copypa/){
  my @data = ;
ファイル名に copypa が含まれているものが有れば開いて読み込みます。

for (@data){
  $_=~s/吉野家/秋葉原/g;
  $_=~s/150円引き/メイドのコスプレ/g;
}
文字の置き換えをします。

open(OUT,"> $file");
print OUT @data;
書き込み用に同じファイルを選択して書き込みます。

 これを応用すれば、パソコン上にあるテキストファイル全ての内容を一括置換したりできます。
 メモ帳などでHTMLを作成している人は全ページ共通のヘッダーやメニュー部分を修正する時にこういうのを用意しておくと便利かもです。
 私もこのサイトの左メニュー部分はこんな感じで書いています。
 上の例だとジェネレーターみたいなものもできそうですね。
 事務っぽいものだったらCSVやアパッチのログからHTMLに加工して見やすいものにしたり、ブログのように自動でページの一括生成をしてみたり、色々です。
 特にPerlは文字を操作するのが得意なので、HTML以外のところでも活躍します。
 こんな感じで、ブラウザ越しに動く Perl もあれば、コマンドライン上で動く Perl もあるということが分かりました。
 なおWordやExcelのファイルの変更はPerlが解釈できないので無理です。扱えるのは純粋なテキストデーターに限ります。

中項目 簡単な例 その2
リファレンスたん

 もう1つの使い方として、なにか簡単なプログラムを実行したいけどテキストファイルに書きおこすほどでもないようなときにもよくつかいます。

 perl -e "ソース";

 -e とするとその後のコーテションの中身を実行します。例えば

C:\>perl -e "print \"みっくみく\";"
みっくみく

 という感じです。
 perl -e の後ろは変数が無いならシングルコーテーションを使って "print '伺か';"でも良いです。
 linux なら perl -e 'print "伺か";'でもいけましたがWindoesではだめでした。\"を使います。
 文章は ; で区切って何個でもかけます。

C:\>perl -e "my $data=\"ロードローラー\"; print $data;"
ロードローラー

 例えば、ここで変数に代入する部分を書き直しやすくするために shift を使ってこんな書き方もできます。

C:\>perl -e "my $data=shift; print $data;" ロードローラー
ロードローラー

 モジュールを使いたいときは -Mモジュール名 を足します。

C:\>perl -MData::Dumper -e "my $data=\"オプーナ\"; print Dumper $data;"
$VAR1 = 'オプーナ'

-Mとモジュール名の間はくっつけて下さい。

 あとコマンドラインに全角を直接打てない場合はメモ帳かなんかに書いて右クリックで貼り付けてください。

 Perlが出来る人で嫌われるタイプが、そんなに詳しくない人に、知らないのが分かっていてわざと難しいことを言うケースがあります。
 Perlは勉強すればするほど、あれも出来るのか、こんなこともできるのか、というようなことが多いのですが、そうでもない場合=ほとんどの場合は知ったこっちゃありません。
 プログラム系の人全般に言えることですが、とにかく「分からないから人に聞く」という行為に対して非情に厳しいです。その中でも特に問題なのがPerlです。
 他の言語は、そこそこやらねばならない状況でないと触れることは無く、ある程度共通した姿勢があるのですが、Perlの場合は「仕事などで本格的にしている人」VS「ホームページの延長で来ちゃう人」という図式が出来がちなので、その温度差は激しいです。
 仕事でしている人からすれば、趣味でてきとーにしている人がゆるい感覚でちょっと調べれば分かるようなことをすぐ人に聞く、ということがものすごく腹立たしいのでしょう。
 仕事だから嫌でも答えを出さねばいけない苦労も知らずに、遊びでしている者がてきとーに聞いて済ますとはっ!という感じでかな。
 だからと言って偉そうにしているのを見るのも腹立たしいです。
 初心者に対していきなり「CGIって分かってんの?」「Perlは本来テキスト云々」「コマンドラインが何某」とか。たのむからw。

 まあ、仕事でも調べない試さない覚えないの3拍子揃っている人種は実在するんですがww。