Perl

文字列に含まれる複数の数値を考慮したソート

ディレクトリとファイルの整理をすることになって、ファイル名に基づいて連番を振るリネーム作業が必要になった。 2_0001.dat、10_0001.dat、10_0002.dat だとか、10_aa.dat、10_ab.dat、といった感じのファイルをいい感じに並び替える必要があった。 見ての…

WWW::Mechanize(LWP::UserAgent)でHTTPリクエストの前後に処理をはさみたい

WWW::Mechanizeを使うとリダイレクト処理とかよしなにやってくれて便利。 しかし、うまくクエリパラメータが渡されてないとかになってくると、やっぱり間の状況もしっかり見たくなる。つまり、curl -Lv URL みたいに、リダイレクトを含めたリクエストログを…

value-domainのDDNS更新を使わずになるべく安全に更新したい

DDNS更新は固定IPを持たない自分としてはとても便利なのだけど、value-domainのDDNS更新はhttp通信のため、DDNS更新用のパスワード情報を傍受される可能性がある。これは非常によろしくないので、セキュアに通信する方法を考える。(結構当たり前のように使わ…

CPANの初期設定を間違えた場合に再設定する

PerlいれてCPAN入れて初期設定をEnter連打して飛ばしたら、 CPANのミラーにロクに繋がらない状態になって焦ったので。 cpanで o conf を入力 cpan[1]> o conf $CPAN::Config options from /root/.cpan/CPAN/MyConfig.pm: ...以下略 このファイルを削除するな…

RSSパースべんち in windows

このあたりがよくまとまってました。 http://weblog.nqou.net/archives/20090223224328.html PurePerlなFeedPPが結構頑張ってる印象。 自分で書いたSAXハンドラーがどんなもんか試した。 いろんなパーサーで。 Rate XML::Feed XML::RSS XML::SAX::PurePerl +…

XML::SAXで遊んだ

RSSを扱う用事があったので、普通のRSSリーダを使ってたけども、 ふと、SAXパーサを使って読み取ってみたくなったので、試した。 DOMだと全体を読み取らないとダメなので、場合によってはメモリを食べてしまう。 SAXなら上から読み取って、いくつかのタイミ…

正規表現 雑メモ

ちょろっとPerl正規表現で遊んでたので、適当に書いとく。 式を文字列として書くなど use strict; use warnings; use 5.10.1; # 普通 say 'xyz' =~ /y/; # 1 say 'xyz' =~ 'y'; # 1 # メタ文字 say 'xyz' =~ /.yz/; # 1 say 'xyz' =~ '.yz'; # 1 # オプショ…

Encode::find_encodingで得られるオブジェクトはスレッドセーフ?

Encodeモジュールはスレッドセーフではない、ってどこかに書いてあって、 find_encodingで得られるオブジェクトを使いまわしてる身としては気になったので。 (スレッド間で使いまわすことはないんだけど。) 適当にスレッド作ってループ回してみたけども、 ス…

Mojoliciousでアップロードファイルを受け取った時にMojo::Asset::MemoryかMojo::Asset::Fileか判別する

$file->asset->is_file を使うとファイルか否かの判別ができます。 my $file = $self->req->upload('file'); if($file->asset->is_file){ print("filepath: ". $file->asset->path); # 一時ファイルパスが表示される }else{ print("content: ". $file->asset…

ファイル演算子とopenとベンチマーク

ファイル存在の確認はファイル演算子である、-fを使うと思うのだけど、 openの戻り値を見ても出来るから、もしかしたら・・・と思ってベンチマークとってみた。 use strict; use Benchmark qw(cmpthese); my $filepath = "bench.pl"; cmpthese(10_000, { 'op…

multipart/form-dataで送信する際、任意のfilename値を指定する

LWPでできるかなって思ってたら、すぐできなかったのでSocket叩いて書いたけど、 調べたら普通にLWPで出来た。ですよねー。 use LWP::UserAgent; use HTTP::Request::Common; my $ua = new LWP::UserAgent; my $res=$ua->request( POST('http://192.168.11.2…

XSでprintfするだけ

XSってなんか難しそうと思っていたけど、わりと簡単だった。 Windows 7 64bit + Strawberry Perl 5.12.3.0 printfするだけなので実用性はないけども、 引数を受け取って処理できるようになってくると、捗りそう。 CODE部分はC言語でもりもり書けますし。 参…

スタックトレースを表示してくれる、diagnosticsプラグマ

dieすると、そのdieした場所の行しか教えてくれないので、 何から呼ばれたのか、とかそういった情報がなかったので、今までprintデバッグでトレースしてました。 diagnosticsプラグマを指定しておくと、dieしたときとかにスタックトレースを出してくれます。…

LWPでgzip圧縮されたコンテンツの取得

LWP::UserAgentを使って某FC2の某RSSを取得してたら、どうみてもUTF-8らしからぬデータが返ってきて焦った。 早速、某エディタを使って作業か・・・と思ったら、 某campで先頭4byteを見て某U先生が「これはgzipですね」と言っていたシグニチャを覚えていたの…

Windows版PerlでMeCabを使いたい

前やってダメだった、Windows版PerlへのText::MeCabの導入が出来たっぽいのでメモ。 MeCabのバージョンは0.98で、PerlライブラリにText::MeCabを使います。 文字コードはUTF-8とします。

MeCab 0.991

形態素解析とかよくわかんないけど、偉い人らが作ってるので使ってみたかったの。 WINWINな環境で頑張ってたけど、うまくいかないので投げた。 まずはおとなしくLinuxでやります。 本体 wget http://mecab.googlecode.com/files/mecab-0.991.tar.gz tar xzvf…

SelfLoader

ドキュメント見ればいいです。 http://perldoc.perl.org/SelfLoader.html use strict; use warnings; use SelfLoader; # 1 while(<DATA>); # 先にDATAを全て読み出してしまうとダメ print foo() . "\n"; # OK print bar() . "\n"; # SelfLoaderを使っている && ま</data>…

エスケープを含む文字列に一致する正規表現(PCRE)

Perlのプログラムの中の文字列定義を数えるための正規表現 多分動くはず・・・ というか、qq ah\agea もOKとかびっくりだよ。 もう少しスマートにならないもんか。 # テスト。文字列は9個ある my $string = <<'_X_'; print('hoge :' . "$hoge"); print('aaa …

use fields; と my TYPE EXPR;

my TYPE EXPR;という書式を初めて知ったので調べた。 資料 my - perldoc.perl.org fields - perldoc.perl.org 追記 御叱り元 Re: use fields; と my TYPE EXPR; - Islands in the byte stream fields::new()が遅いからですね。fields::new()の意味は、5.10.0…

Perlでtry-catch-finally文

サブルーチンのプロトタイプを使えば、 @nums = map { $_ * 2; } @nums; といった、変った構文を自分で作ることができます。 これを使ってJavaのtry-catch-finally文っぽいものを書いてみました。 catch判定がスマートではないので、もう少し改善したい。。。…

wind0wsのような感じのファイル名ソートをしたい

普通の文字列比較では、"a999.txt"と"a1000.txt"では、後者が小さいとみなされます。 しかし、後者が大きいと判定したほうが、自然です。 Wind0wsの場合は数値の部分は数値の比較を行ってくれるようで、ファイル名ソートすると、良い感じにやってくれます。 …

ファイル内の任意の文字列(バイナリOK)を探索

Windowsのファイル内検索システムがクソすぎるので急ぎで作った。 my $search = "文字列"; my $MIN_BUFFER_SIZE = 4096; foreach my $file (<*>){ if(! -f $file){ next; } print "$file\n"; open my $FH, "<", $file || die 'cant open file'; binmode($FH)…

データベースのお勉強がてらに、ただタギングするツール書いた

Perl5.10(1005) + DBI + DBD::SQLite で動きます。 本体コード: Local/Util/TaggingDatabase.pm http://ideone.com/bU1R8 テスト: test.pl http://ideone.com/6QKsc

zipで圧縮

CSのデモを整理のためにzip圧縮しようとしたら、220個ものデモを手動でぽちぽち圧縮するのはとんでもなく面倒な事に気づいて、コマンドラインで出来れば・・・と思ったので。 オレオレバッチ処理プログラミングは楽しい。それにしても久々に普通のプログラム…

userstreamapi おまけ

前の続き。 LWP::UserAgentを眺めていたら http://perldoc.jp/docs/modules/libwww-perl-5.813/LWP/UserAgent.pod#item__ua__gt_get___url__ :content_cb オプションでコールバック関数が指定されると、 レスポンスの内容の塊ををサーバから受信する毎にこの…

TwitterのOAuth認証を通過してTLを取得

OAuth認証を通過してTwitterの自分のアカウントのTLを取得するプログラムをPerlで書いてみた。 色々間違っていそうだけど、とりあえずTLを取得できたので、その流れをメモ。 Net::OAuthとか使うんだろwwwwとか思ってた人、ごめんなさい。 ほぼ標準で入っ…

HMAC + 何か

HMAC - Wikipedia http://ja.wikipedia.org/wiki/HMACRFC2104 - HMAC: Keyed-Hashing for Message Authentication http://tools.ietf.org/html/rfc2104 要するに、データをキーでハッシュします。これによりデータを認証できます。 Perlで簡単に実装できるの…

文字列と排他的論理和

Perlで文字列に対して排他的論理和(xor)などのビット演算が使える事を知りました。

マジカルインクリメント

マジカルインクリメントとかブルートフォース以外で何に使うんだよ・・・

カレントディレクトリに対してファイル名にある文字列を含まないファイルを削除

Perlうめえ。は、カレントディレクトリからファイルとディレクトリを全て抽出してくれる。 ワンライナーに便利です。 strを含まないファイル名をunlinkする。 for(){unlink if !/str/} 正規表現だと柔軟でいい。逆にstrを含むなら "!" をはずす。 正規表現を…