‘Perl’ カテゴリーのアーカイブ

オープンソースカンファレンス 2011 Kansai@Kobe でセミナー

オープンソースカンファレンス 2011 Kansai@Kobe でセミナー講師やってきました。

OpenCOBOLとPerlを使った汎用機ダウンサイジング

上記ですが、遠方とかで見に行けなかった人、字が小さくてプレゼン資料が読めなかった人もいらっしゃると思いますので特に見て頂きたい部分につきましてファイル用意いたしました(クリックで拡大)。

既存の汎用機リソースの移植をなるべく工数をかけずに出来るように頑張ってみました。

次回はOSC2011 Hokkaido にて出展予定ですので、宜しくお願い申し上げます。

追記:セミナースライドも上げておきます
20110415MFdownsizing

Popularity: 5% [?]

Mac で複数ファイルの一括置換ってどうしてます?

Windows だと Devas ってソフトでバッチリだったんですが、Mac ではいいソフトを見つけることができずにいます。

サブディレクトリ内のファイルも含めてまとめて置換は、今はターミナルで次の手順でやってます。

まず、find で特定拡張子のファイルリストをとって xargs で grep にわたして置換したい単語を検索。

1
$ find . -name '*.拡張子' | xargs grep 置換したい単語

で、grepに -l オプションつけて置換したい単語が含まれるファイルリストをとって xargs で  perl にわたして置換。

1
$ find . -name '*.拡張子' | xargs grep -l 置換したい単語 | xargs perl -p -i.bak -e 's/置換したい単語/置換後の単語/g'

perl の -i オプションに .bak と付けてるので元ファイルは bak という拡張子で残ります。
「perlだけでやればいいじゃん」と言われそうですが、いきなりやるのは不安なのと置換が行われてないファイルまで全てタイムスタンプが変わったりしたのでこの方法に落ち着きました。

で、置換されたファイルの内容確認して問題なければbakファイル削除。

1
$ find . -name '*.bak'

で確認して、

1
$ find . -name '*.bak' | xargs rm

完了〜。 xargs ラヴ♡

Unix系なら他でも使えると思います。

いいっちゃいいんですが、記憶力がないので思い出せる気がしません。historyがあふれるとオレ終了って感じ(なのでメモという意味もあり)。

ちなみに私がターミナルで一番使うコマンドはブッチギリで

1
$ history | grep コマンド名

history ラヴ♡♡

Popularity: 21% [?]

メモ:Linux::Inotify2 でディレクトリを監視して処理

Linuxサーバー上のディレクトリにファイルが作成されたら処理するってのをやりたくて、調べてたら cpan の Linux::Inotify2 が良さそうだったので試してみました。

モジュールをインストール(cpanminusを使用)。イベントループに AnyEvent を使うといいらしいので、そちらも。

1
2
$ cpanm Linux::Inotify2
$ cpanm AnyEvent

指定ディレクトリにファイルを投入したら別ディレクトリに mv するスクリプトを作成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env perl
use strict;
use warnings;
 
use Linux::Inotify2;
use AnyEvent;
 
my $watch_dir = $ENV{HOME} . '/inotify/queue';
my $processed_dir = $ENV{HOME} . '/inotify/processed';
my $inotify = Linux::Inotify2->new or die $!;
 
$inotify->watch(
    $watch_dir,
    IN_CLOSE_WRITE | IN_MOVED_TO,
    sub {
        my $e    = shift;
        my $name = $e->fullname;
        print "test!:${name}\n";
        system( 'mv', $name, "${processed_dir}/" );
    }
);
 
my $cv = AnyEvent->condvar;
my $inotify_w = AnyEvent->io(
    fh   => $inotify->fileno,
    poll => 'r',
    cb   => sub { $inotify->poll }
);
$cv->recv;

起動して queue ディレクトリにファイルを置いたら processed ディレクトリに移動するのを確認できました。

Popularity: 13% [?]

メモ:CentOS 5.5 で perlbrew + cpanminus

ユーザーのホームに全部入るので影響範囲を限定できてうれしい。
OSのバージョンとかあまり関係ないのですが、試した環境が CentOS 5.5 なので。

まずは perlbrew から。

ホームに移動。インストール用のファイルを取ってきてインストール実行。

1
2
3
4
$ cd
$ wget http://xrl.us/perlbrew
$ chmod +x perlbrew 
$ ./perlbrew install

インストール用ファイル削除。イニシャライズを実行。

1
2
$ rm perlbrew 
$ perl5/perlbrew/bin/perlbrew init

用意された設定を読み込むように .bashrc に追加。

1
2
$ echo "source $HOME/perl5/perlbrew/etc/bashrc" >> ~/.bashrc
$ source .bashrc

perlbrewで perl 5.8.9 をインストール。インストールした perl 5.8.9 に切り替え。

1
2
$ perlbrew install perl-5.8.9
$ perlbrew switch perl-5.8.9

確認。使用するものに(*)がつく(アカウントapacheでやってます)。

1
2
3
4
$ perlbrew installed
perl-5.8.9(*)
/home/apache/perl5/perlbrew/perls/current/bin/perl
/usr/bin/perl

次に cpanminus 。

ホームに bin がなかったんで掘って移動。

1
2
$ mkdir ~/bin
$ cd ~/bin

ファイルを取ってきて実行権限付ける。

1
2
$ wget http://xrl.us/cpanm
$ chmod +x cpanm

以上。あら簡単。
※この方法だと後で不便があります。コメントでご助言いただいていますのでご参照下さい。

ちまたで噂の cpan-outdated + cpanminus での全モジュールのアップデートもやっときます。

cpan-outdated 入れる。

1
$ cpanm App::cpanoutdated

cpan-outdated は古くなったモジュールの一覧返してくれるのですが、

1
$ cpan-outdated | cpanm

と cpanminus に食わせると古くなったモジュールを全部アップデートしてくれる。素敵!

Popularity: 13% [?]

Perlでインタラクティブシェル

Ruby、Python等の言語にはインタラクティブシェルが付いてます。PerlではDevel::REPLというモジュールをインストールすることで実現できます。(作者様には感謝です。)書くまでもないのですが、インストールにはcpanを使用します。(当方環境はMac OS X 10.6及び、Perl5.10)

$ sudo cpan
cpan[1]> install Devel::REPL

インタラクティブシェルの起動には下記Perlを実行します。

$ re.pl

後はコード書いてEnterを叩いていけば即座に実行されていきます。
ちょっとした実験したりするときに大変重宝します。

Popularity: 7% [?]