weblog of key_amb

主にIT関連の技術メモ

Perl

Module::Installでモジュールを作ってみる

おそらくはそれさえも平凡な日々: CPANモジュールのパッケージングの歴史 にCPANモジュールのパッケージングの歴史があり、トレンドを知ることができる。Module::Installには課題もありそうだが、現在は広く普及してて無難っぽい。 ので、手始めにこれを使っ…

Macにplenvを入れる

https://github.com/tokuhirom/plenvplenvはperlbrewのようにPerlの複数バージョンを切り替えて使えるツールである。 githubのREADMEにあるように、Mac OS Xであれば、以下でインストールできる。 ※事前にHomebrewのインストールが必要。 brew update brew i…

Perlで大文字/小文字の置換

uc/lc 全て大文字/小文字にする。 $ perl -e 'print uc "Goatex\n"' GOATEX $ perl -e 'print lc "I Love U\n"' i love u ucfirst/lcfirst 先頭一字だけ大文字/小文字にする。 $ perl -e 'print ucfirst "doraemon\n"' Doraemon $ perl -e 'print lcfirst "M…

markdownを使ってHTMLメールを送信

markdownはプレーンテキストをHTMLに変換するツールである。CPANだとText::Markdownというモジュールがあるので、これを使ってHTMLメールを送るには、以下のようにすればできるだろう。 use Email::MIME; use Email::Sender::Simple 'sendmail'; use Text::M…

yamlの文法チェック

YAML::Shellというyamlのテスト用のモジュールを使うといい。 インストールするとyshというコマンドが使えるようになる。 cat sample.yaml | yshyamlの文法が正しければ、文書構造のdumpが出力される。 文法が間違っていたらエラーが起こる。 参考 YAML::She…

Email::MIMEとEmail::Sender::Simpleを使ってメールをbccに送る

単純にBccヘッダにアドレスを追加しても、所望の機能は達成されない。 Email::Sender::Manualに、どうやってBcc送信をやったらいいか解説がある。私の場合は次のようにした。 my $email = Email::MIME->create( header => [ From => $from, To => join(',', …

FormValidator::Simple

Webでのリクエストパラメータのチェックなどに使う。 参考 FormValidator::Simple - search.cpan.org http://d.hatena.ne.jp/fjkktkys/20070427/1177664978

Perlのワンライナーとコマンドラインオプション

コマンドラインオプション オプション 意味 -e 文字列をスクリプトとして実行 -l 強制改行 -M{モジュール名} モジュールをuseする -MO=Deparse コマンドライン実行時にスクリプトに変換する -n 1行ずつ処理 -p 出力 -i 出力先を入力ファイル自身にする 以上…

AnyEvent::IRC::Client

perlでIRCボットを作るときに使うモジュール。 参考 livedoor Techブログ : 小ネタ AnyEvent::IRC::Client - search.cpan.org

IO::Prompt::Simple

perlでプロンプトをさくっと使いたいときに使う。 use IO::Prompt::Simple; if ( prompt 'ok?', +{ yn => 1 } ) { # 処理 } else { return; } 参考 IO::Prompt::Simple - search.cpan.org にひりずむ::しんぷる - IO::Prompt::Simple 書いた IO::Prompt::Sim…

Nagiosの.cfgファイルのパーサ

Nagios::ConfigというCPANモジュールを使えばできそう。Nagios::Config - search.cpan.org

Perl小ネタ

ミリ秒を求める Time::HiRes::gettimeofdayを使う。 use Time::HiRes; $now = Time::HiRes::time; ($seconds, $microseconds) = Time::HiRes::gettimeofday; UNIX_TIMESTAMPがミリ秒単位でわかる。 参考 ミリ秒を求める Script Source Sample for Perl wanta…

Data::Lock

Perlで定数を使う方法はいくつかある。 よく知られているのは constant, ReadOnlyだが、Data::Lockというものは変数を一時的に書き込み不可にするそうな。 use Data::Lock qw(dlock); dlock my $ROWS = 10 ; dlock my @DATA = (10, 20, 30); print "row is $…

Image::Magickを使ってみた

画像合成をやる必要があって、Image::Magickでgif合成してみた。Image::Magickの使い方はこんな感じ。 use Image::Magick; my $magick = new Image::Magick(); $magick->Read($file); # 画像ファイル読み込み # 指定した座標に重ね合わせる $magick->Composi…

Cache::FastMmap::newの排他制御

前掲のようにCache::FastMmapを使い出して、しばらく経った頃に急にエラーが出ることがあった。 ... failed: File exists at /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/Cache/FastMmap.pm line 629.%0ACompilation failed in require at /pat…

Cache::FastMmapと仮想メモリ

FastCGIの全プロセスでデータを共有したくて、Cache::FastMmapを使ってみた。共有のshare fileを使う。 package MyApp::API::Cache; use Cache::FastMmap; my $fastMmap = Cache::FastMmap->new( share_file => '/tmp/sharefile-myapp-fastmmap', ); みたい…

FormValidator::Simple

Webでのリクエストパラメータのチェックなどに使う。 参考 FormValidator::Simple - search.cpan.org はてなダイアリー

Perlで並列処理:Parallel::ForkManager

perlで並列処理を行うためのモジュール。 参考 Parallel::ForkManager - 簡単な並列処理によるforkマネージャー - prleodc.jp

日付の操作:DateTimeオブジェクト

Perlで日付の操作を簡単に行えるモジュール。 use DateTime; my $dt = DateTime->new( time_zone => 'local', year => 2008, month => 8, day => 4, hour => 15, minute => 0, second => 0 ); # 日の加算 my $dt_tommorow = $dt->clone()->add( days => 1 );…

CPANモジュールがインストールされているか調べる

perl -Mモジュール名 -e'print $モジュール名::VERSION,"\n"' 参考 [Perl][Linux] CPANモジュールがインストールされているか調べる。: @BIBOUROKU

データの保存・取り出し:Storable

Storableという素晴らしいモジュールがあることを最近知った。簡単にデータの保存・取り出しをすることができる。今まで並列処理で一時ファイルに書き出すとき、タブ区切りなどに加工していたのがばかばかしい。 ハッシュのマージ 並列した際の、ハッシュデ…

Perlでスレッド処理

ithreadsというのを使うと、スレッド処理ができる use threads; スレッド間でデータを共有するには、threads::sharedを使う。 use threads; use threads::shared; my ($value, @array, %hash); share($value); share(@array); share(%hash); スカラー変数し…

splice:配列操作

配列から要素を削除する # 全部削除 @removedに@arrayの中身が全部入る。 my @removed = splice(@array); # 5番目以降を削除 my @removed = splice(@array, 5); # 5番目から10番目を削除 my @removed = splice(@array, 5, 10); 【perl】関数splice〜配列の要…

ファイルの存在判定

my $filename = "check.txt"; if( -f $filename ) { print "あるよ\n"; } else { print "ないよ\n"; } '-f'でファイルのチェック、'-d'でディレクトリのチェック、'-e'でファイルまたはディレクトリの存在チェックです。 参考 Perlでファイルの存在チェック…

(メモ) Perl でファイルのタイムスタンプを取得する

組み込み関数 stat を使う。 my @filestat = stat $filename; my $atime = localtime($filestat[8]); # アクセス日 my $mtime = localtime($filestat[9]); # 更新時刻 stat ではタイムスタンプ以外に、所有者やパーミッションモードなどの属性も取得できる。…

置換コマンド

s演算子を使う。 基本だけど。 $path = '/usr/bin:/bin:/home/admin/bin'; $path =~ s|/usr/bin|/usr/local/bin|; $path =~ s(/usr/bin)(/usr/local/bin); $str = "test 1 2 3"; $str =~ s/$num//gxo; などなど。 参考 正規表現 | Smart -Web Magazine

Getopt::Long

Option解析。 #!/usr/bin/perl use strict; use Getopt::Long; main() sub main { my $opt_start; my $opt_end; GetOptions( 'from=i' => \$opt_start ,'to=i' => \$opt_end ); if (!$opt_start) { print "Can't Excecute without start date!\n"; usage(); …

perldoc, POD

perlではPODという形式でソースファイルにドキュメントを記すことができる。ただ、完全な日本語化はされていない模様。。 perldocで日本語で使おうとしてみた - ケーズメモ

Perlのループ制御

next ただちに次の繰り返しに移る continue nextで処理をスキップしても、continueブロックは実行される last 現在のループを終了する redo ループの先頭に戻る goto あまり使わない。 参考 制御構文 | Smart -Web Magazine

Perlの真偽判定

楽天が運営するポータルサイト : 【インフォシーク】Infoseek 結論からいうと、Perl言語では0(ゼロ)は偽,'0'(文字のゼロ)も偽,''(空文字列)も偽,undef(未定義値)も偽,それ以外は真