perl

File::Tail - 定期的にログを監視する

daemonチックなプログラムの時に便利。swatchもこれを使ってる。 use File::Tail; my $file = File::Tail->new( name => "/var/log/httpd/access_log", interval => 1, maxinterval => 5, ); while (my $line=$file->read) { print "$line"; } ログにしばら…

Params::Validateでパラメータのチェック

perldocでソース読んでたら出てきたので。メモ初級編。サブルーチンで使うと幸せになれそうですね。 引数が与えられたかどうかのチェック 型までは見ない。 use Params::Validate qw(:all); sub foo { my $args = validate( @_, { hoge => 1, ## mandatory (…

perlでNetAppをごにょごにょ

Phillip Moore / NetApp-1.1.2 - search.cpan.org cpanにNetAppモジュールがあったのを発見したので。さっそく使おうとしたけど、たぶんNetApp::Filer がおかしい?くてtelnet loginできない。まぁtelnetやめてsshにしろっていう話でもあるけど。 perldoc -m…

スカラコンテキストでのglob関数の挙動がよくわからない

なんか初歩的なんですけど。以下のファイルがある状態で。 $ ls [abcd] a b c d次のコードを実行。 use warnings; use strict; my @file = qw(a b c d); print "### scalar context\n"; for my $file (@file) { print scalar glob $file; print "\n"; } prin…

perlでfork

use warnings; use strict; my $pid = fork; if ($pid) { ## parant process } else { ## child process } waitpid($pid,0); waitpidをしなかったら、子プロセスが残っていても親プロセスは先に終わってしまう。 指定した数だけfork my $max_process = 10; m…

Smart::Commetns

今さらだけど、めちゃ便利ですよね。デバッグ終わったらuse Smart::Comments; をコメントして無効にすればいいだけだし。プログレスバーとか便利便利

perlでRegex::Listを使って正規表現を効率良く書く

例えば qr/foobar|fooxar|foozap|fooza/ と書くと左の単語から1つずつ順番に評価されるので数が多いと性能が落ちる。それを、カッコでグループしてくれたりして最適化してくれるモジュール。 use Regexp::List; my $l = Regexp::List->new; my $re = $l->lis…

Spreadsheet::WriteExcel のformatがよくわからない

use Spreadsheet::WriteExcel; my $workbook = Spreadsheet::WriteExcel->new('./test.xls'); my $worksheet = $workbook->add_worksheet(); my $format = $workbook->add_format(); $format->set_border(1); $worksheet->write(1, 1, 'hogehoge', $format);…

perlでmixiボイスにpostする

今さらだけどWeb::Scraperとかの勉強がてらに書いてみた。 #!/usr/bin/perl use strict; use warnings; use WWW::Mixi; use Web::Scraper; use Encode; use File::Basename; my $mixi = WWW::Mixi->new('username', 'password'); $mixi->login; my $res = $m…

GetOptionsの引数を1つのハッシュに入れる

1個ずつスカラーに入れなくても良かった。 use Getopt::Long; GetOptions( \my %options, qw/help server port=i host=s/, ); あとは$options{host} とかで参照。

perl - Template Toolkit 勉強

HTML::Templateみたいな。HTML用だけではなく汎用的に使える。設定次第では出力時にhtml用にescapeとかもしてくれる。 http://e8y.net/mag/008-template/ perldoc Template CGI::ApplicationではPlugin::TTもある。 use Tempalte; my $tt = Template->new();…

YAML::TinyのDump

YAML::Tinyはpure perlなYAMLモジュール。YAMLとかと使い方はほぼ同じ。 ただ、blessされたオブジェクトは表示できない? use YAML::Tiny qw(Dump); package Hoge; sub new { my ($class) = @_; return bless {}, $class; } package main; my $hoge = Hoge->…

perl - HTML::FillInForm

cgiのデータをformに反映させる。formでサブミットされて、一部パラメータが不足しているときに再表示させる場合など。 my $query = CGI->new; ## $queryの処理 my $tmp = HTML::Template->new( filename => 'file.tmpl', associate => $query, ); my $form …

CGI::Application::Dispatch 勉強

http://rt.air-nifty.com/pods/CGI/Application/Dispatch.html#path_parsing run mode CGI::Application::Plugin::AutoRunmodeを使えば、run_modesをいちいち設定しなくても、PAHT_INFOから同一のメソッドを探す。そのメソッドには StartRumode : setupのsta…

CGI::Application::Dispatchのstartモード

start というrmを用意してないのに、アクセスしたら表示された。環境変数を吐いている確認用のページみたいなのが。なんだこれ。よくわかんないので上書きするか。

nimが動かなかったけど動くようになった

※ Mouseのverを0.52に上げたら環境変数を設定しなくても動くようになったようです http://twitter.com/samurai20000/status/11178631583 nimとは http://opensource.kayac.com/ja/projects/nim/ http://perl-users.jp/articles/advent-calendar/2009/casual/…

WWW::Mechanize付属のmech-dumpがbasic認証できない

どっか見間違ってるのかな。optionsには--userと--passwordがあるけど、それを指定しても認証とおらないんだけど。WWW::Mechanizeのversionは1.60. $ mech-dump --user=user --password=pass http://example.com/auth/page/ Error GETing http://example.com…

PersistentPerl(or mod_perlとか)でのmyとourとサブルーチンの引数に渡した場合の挙動の違いが良くわからない

http://daemoninc.com/SpeedyCGI/CGI-SpeedyCGI-2.22/README.html#FREQUENTLY_ASKED_QUESTIONS http://perldoc.jp/docs/modules/PersistentPerl-2.21/PersistentPerl.pod グローバルが実行の間で保持されます。例えば永続的なデータベース・ハンドルを保つと…

perlのflockでファイルの排他制御

http://www.tohoho-web.com/wwwperl2.htm#flock http://homepage1.nifty.com/glass/tom_neko/web/web_04.html#useflock flock(FILEHANDLE, operation) 1 読み込み宣言ロック(ブロックモード) 2 書き込み宣言ロック(ブロックモード) 5 読み込み宣言ロック(非…

perlのDBIのDEBUG

cliから実行するときにDBI_TRACE環境変数を設定。 perldoc DBI output appended to that file. If the name begins with a number followed by an equal sign ("="), then the number and the equal sign are stripped off from the name, and the number is…

cpanでDBD::mysqlのinstall出来ないとき

毎回オプションを忘れてしまう。つってもperl Makefile.PL --helpで見ればわかるけど。localhostのDBサーバが起動していないとmake testでこけて入らないので。 # cpan DBD::mysql ## => testでエラー # cpan cpan> look DBD::mysql Running look for module…

perlのワンライナーでモジュールの関数をエクスポートする書き方

書き方わかんなくて迷ってたけど、適当に書いてみたらでけた。これでいいのかな。 use Net::Domain qw(hostdomain); print hostdomain; って感じの場合、 $ perl -MNet::Domain=hostdomain -e 'print hostdomain'

perlでHTTP POSTしてファイルアップロードする

HTTP::Request::CommonのPOSTで。 http://homepage3.nifty.com/hippo2000/perltips/HTTP/Request/Common.html http://d.hatena.ne.jp/end0tknr/20080830/1220059440 いやー簡単で便利すなぁ。

perlsh - perlの対話shellのinstall

perlshは覚えてたけど、CPANモジュールの名前忘れて苦労した。Term::ReadLine::Gnuに付属してくるのだった。cpanで入れただけではperlshコマンドはPATH通ったとこに入ってくれないのなー。 # cpan -i Term::ReadLine::Gnu # cpan > look Term::ReadLine::Gnu…

Sys::Syslogのopenlogでfacility指定が有効にならない?

openlog(basename $0, 'pid', 'local5'); syslog('alert', 'hogehoge'); としてもlocal5に出てこない。なんでだ。 syslog('local5.alert', "hogehoge"); こういう風にsyslogで指定するといけるのに。どこが間違ってるんだー。 ref. http://fragments.g.haten…

slowlorisを実行するには、それなりのスペックが必要?

ちょいとslowlorisを実験してみようとvmware上のdebian5で動かしたんだけど、一向にサーバのapacheが落ちない。なんだかな〜と思って別の物理的なサーバからslowloris実行したらあっさり落ちた。 ホストOSのWindowsもしょぼしょぼだから、そんなもんなのかな…

Perlをthreadsを有効にしてコンパイル

古いサーバ(linux kernel 2.4.20)でperl5.10を $ ./Configure -des -Dprefix=/usr/local/perl5.10で入れたら、threadsが有効にならなかった。(slowlorisが動かない) $ perl slowloris This Perl not built to support threadsコンパイルしなおし。 $ ./Confi…

メールヘッダからenvelope-toを抜き出す方法がわからない

ToヘッダならMIME::Parserで use MIME::Parser; my $entity = $parse->parse(\*STDIN); my $head = $entity->head; my $to = $head->get('to'); とかすればいいことはわかった。でもenvelope-toはどうやるんだろう。 my @all_received = $head->get('Receive…

use English '-no_match_vars'

正規表現つかう時の特殊変数、$`, $&, $'に対応する$PREMATCH, $MATCH, $POSTMATCHを使用しない。 コード中でこれらの変数を一度でも使ってしまうと、以後正規表現を利用する度に、これらの変数に値をセットするためにパフォーマンスが悪くなるから。詳しく…

Net::Telnet - perlでtelnet

今時telnetかよっていう感じだけど、一部のNW機器はtelnetしかなかったりするので。で、やってみたんだけどopen、waitforで失敗した場合は有無をいわさず例外で終了するぽい?ので、エラー処理が必要な場合はeval { } で囲めばいいのかな。 login use Net::T…