Perl

OpenSearchDescritionの続き(最後)

http://d.hatena.ne.jp/kazuokohchi/20070309#1173435564 のさらに続き。検索エンジンにnamazuを使っているとIEではどうしても文字化けしていた。結局以下のようにする。 opensearchdescritionのxmlで、以下のように指定。 <Language>ja-JP</Language> <OutputEncoding>EUC-JP</OutputEncoding> <InputEncoding>UTF-8</InputEncoding>

GD.pmの例

GD.pmを使って画像をリサイズ。CentOSにGD.pmをインストールするには、事前に、yumやrpmなどで、jpeg, png, zlib, freetype, Xpm(xorg-x11)のdevelパッケージをインストールしておくこと。 #!/usr/bin/perl -w use GD; $src_image = "foo.gif"; $dest_image …

cpanコマンド

設定をちょっと変える場合 cpan> o conf 設定内容を表示 .... cpan> o conf ftp_proxy '' ftp_proxy cpan> o conf http_proxy '' http_proxy cpan> o conf commit最後に書き込んでます。すべてやり直したい場合は、 cpan > o conf initでinteractive modeで…

CPANのTips

CPANの初期設定が面倒な人(すべてデフォルトでいい人)。 # echo no | perl -MCPAN -e shell または、 # echo no | cpanこれ、まるごとPerl! Vol.1のP216に載ってました。>著者の方ありがとうございます。 CPANの設定を消す場合 # cd # rm -fr .cpan # cd /u…

どうしてもInsecure dependencyを回避したい場合

suidなperlを実行したときに、 Insecure dependency ....のエラーが出る場合で、どうしても回避したい場合の処理(perlsec.1より)。 サブパターンを参照することでも、この汚染チェックの仕組みの裏をかくことができます。 $1, $2 といった部分文字列を使うと…

MIME-toolsのインストール

CentOS 4.4にMIME-toolsをインストールしたときのメモ。MIME-toolsはメール(MIME)解析のためのperlモジュールの集まり。 # wget http://search.cpan.org/CPAN/authors/id/D/DS/DSKOLL/MIME-tools-5.420.tar.gz # zcat MIME-tools-5.420.tar.gz | tar xvf - #…

モジュール探し

http://blog.livedoor.jp/dankogai/archives/50703529.html より。 ただし、require Foo::Barおよびuse Foo::Barでは、様相が少し違います。この二つにおいては、「Foo/Bar.pmというファイルがロードされていなければ、@INC中のDirectoryにFoo/Bar.pmにそれ…

IO::Fileでの同期制御

use IO::File; # "w" or "> $f" my $fh = IO::File->new($f, O_WRONLY|O_TRUNC|O_CREAT|O_SYNC, 0644) or die "Can not open $f: $!\n"; print $fh .... ; $fh->close; O_SYNCはOSによって違うかもしれない(LinuxはO_SYNC。これはopen(2)を参照)。

atomicなグループ

perlの正規表現(perlでなくてもいいが代表的なので)で、 (?>なんとか)はアトミックなグループという。 これは正規表現エンジンが、この指定された部分に関して、後戻りのためのステートを捨てて、一回マッチしたものを分解不可能なものとする(atom:原子はこ…

サブルーチンの重複

perlでは同じサブルーチンがあるとredefinedしてくれるようだ。 $ cat test.pl #!/usr/bin/perl -w sub funca { print "func: a\n"; } sub funca { print "func: aa\n"; } &funca; $ perl test.pl Subroutine funca redefined at z.pl line 6. func: aa $

括弧忘れ

#!/usr/bin/perl .... $a = (split(/:/, $line))[0];と書くべきところを、 $a = split(/:/, $line)[0];と書いてしまう。 syntax error at xx.pl line N, near ")[" Execution of z.pl aborted due to compilation errors. のエラーで気づくのだが、どうして…

10分の無駄

perlで関数を指定するところを、変数を指定したみたいで、動かないなぁ、と10分ほど悩んでしまった。 &func;と書くべきところを、 $func;と書いていたのだ。とほほ。

CGIからバックグラウンドプロセスを起動

#!/usr/bin/perl system("foobar-command &"); print <<_EOF; Content-type: text/plain; end execute _EOFのようなCGIを起動して、本当にback groundで動くのかと思ってやってみた。結論を言えば、画面の表示は先に表示されるが、出力をhttpd(Apache2)がちゃんとにぎっているので、プロセスが終了するまではプログレスバーが途中(IEならロゴがなびいている)の状態であった。httpdがそういう仕様なので仕方がないのだが、もしかしたらと思い、 system("foobar-command >/…</_eof;>

perlでOOP

perlでオブジェクト指向プログラミングをしているのだが、つまんないことで、1時間30分もハマった。 .... package Foo; sub new { my $class = shift; my $h = { 'title' => shift }; bless $h, $class; } sub title { my $self = shift; $self->{'title'}; …

perlからrubyへ

ずっとperlやっていて、ちょっとrubyを書いたときには、 行末にセミコロン(;)をつけてしまう(個人的にはセミコロン症候群と言っています) 変数を$からはじめてしまう。 String#to_i,Integer#to_sを忘れてしまう。 ことがある。とくにString#to_iは、perlでは…

perlのリファレンス

ハッシュのリファレンスと無名ハッシュの違いを今日味わいました。 sub myfunc { my $s = shift; my(%ta) = ('a' => "a$s", 'b' => "b$s"); return %ta; } foreach (qw/x y z/) { %a = myfunc($_); push(@z, \%a); } foreach (@z) { print $_->{'a'} . ':' .…

perlで日本語切り出し

日本語を含んだ文字列で文字を切り出す場合、切り出した文字列の間にASCIIコードが奇数個含まれていると、切り出したおしりが文字化けを起こすはず。でも、文字コードがEUC-JPで、perlで実現する場合、これを使えばなんとかなるようだ。http://blog.nomadsca…