perl

日本語組版 Perl ライブラリ

http://hp1.jonex.ne.jp/~nakajima.yasushi/ tex ライクな構造の入力でPDFを生成するライブラリ。

use したモジュールの位置を出力する

perlは一度読んだファイルをこの変数の中に押し込む。たとえばこんな感じ。 % perl -MEncode -le 'print "$_:$INC{$_}" for sort keys %INC' Encode.pm:/usr/local/lib/perl5/5.10.0/darwin-thread-multi-2level/Encode.pm Encode/Alias.pm:/usr/local/lib/p…

"HTML-Element" sucks

Perl はオブジェクトのメモリ管理に参照カウント方式をとっている。 つまり、オブジェクトが参照されている数、が0になったらオブジェクトを解放する。 この方式には、循環参照があるオブジェクト集合を解放できないという問題がある。 循環参照のあるオブジ…

tr, s のほうが Unicode Japanese より速い

#! /usr/bin/env perl use utf8; use Benchmark; use Unicode::Japanese qw[unijp]; use Readonly; use Encode; Readonly my %dakuon => map {$_} split //, 'ウヴカガキギクグケゲコゴサザシジスズセゼソゾタダチヂツヅテデトドハバヒビフブヘベホボ'; Read…

use utf8 より $KCODE='UTF8' のほうが速い

#! /usr/bin/env ruby $KCODE='UTF8' require 'moji' DAKUON = Hash[*('ウヴカガキギクグケゲコゴサザシジスズセゼソゾタダチヂツヅテデトドハバヒビフブヘベホボ'.split //)] HANDAK = Hash[*('ハパヒピフプヘペホポ'.split //)] DAKUON_ORIGIN = DAKUON.ke…

オブジェクトをキーとしたハッシュ

Perl の組込みのハッシュは、いろいろな点で java.util.Map (Java) とか std::map (C++) と違うので、 同じような動作を期待するとはまることが多い。Perl の組込みのハッシュは文字列をキーとしたハッシュなので、 bless されたリファレンスはたとえば 「ク…

Perl Critic

http://perlcritic.com/ Some Ways Are Better Than Others Perl のスタイルチェッカー

thread2dat.pl

perl -pe' s{^(http://.*?)/.*/(.*?)/(\d{10}).*$}{$1/$2/$3.dat\n}'

2ch板の全レスダウンロード

perl -Mstrict -MWWW::2ch -e'my $bbs=WWW::2ch->new(url => $ARGV[0], cache=>q{/tmp/www2ch-cache}); $bbs->load_setting; $bbs->load_subject; print map $_->url."\n", $bbs->subject->threads' http://academy5.2ch.net/gengo/ | xargs wget -w 1 -m

Gaussian Process で滑らかな関数を発生させる

Gaussian Process は関数空間上の確率変数の一種。 #! /usr/bin/env perl use strict; use warnings; use Math::Random qw/:all/; my @xs = map { ($_/30) } (0..20); # 関数への入力値列 my $n = scalar @xs; my @v = map { my $x=$_; [map {exp -1/2*( ($x…

nesugi.net - swigの使い方のメモ書き

http://www.nesugi.net/hiki/?swig%a4%ce%bb%c8%a4%a4%ca%fd%a4%ce%a5%e1%a5%e2%bd%f1%a4%ad 1. moduleにしたいプログラムのsource(*.cppとか)を持ってくる 2. cppファイル毎に*.iを書く ← これがswig語 3. swigコマンドで*.iを各スクリプト言語用のwrapper(…

Syntax-Highlight-Universal

http://search.cpan.org/~palant/syntax-highlight-universal/universal.pm はてなのスーパーpreらしい

changelog count

#! /usr/bin/env perl use strict; use warnings; my %count; my $print_line_num = 0; use Getopt::Long; GetOptions('line-num' => \$print_line_num); my @lines = <>; my $count = $print_line_num ? sub { $_[1] - $_[0] } : sub { scalar grep /^\t\* …

なぜ Perl を使うのか

CPAN があるからだと思う。Python Cheese Shop : Home Ruby Application Archive CPAN

XHTML を XML に逆変換

#! /usr/bin/env perl use warnings; use strict; use WWW::Mechanize; use WWW::Mechanize::Link; use URI::URL; use URI::file; use URI::Escape; use Getopt::Long; use Pod::Usage; use XML::Simple; use Data::Dumper; use Encode; use encoding qw/utf…

crawler.pl

wget は CGIパラメタが違うだけのURLを区別してくれないっぽい。 もっと攻撃的なクローラがほしかったので書きました。 無条件(ホストだけは合わせるけど)で2段階のリンクを踏んでとってくるクローラ: #! /usr/bin/env perl use warnings; use strict; use …

ChangeLog parser with Parse/RecDescent

http://blogger.main.jp/changelog/2004-07-28-2.html 改造した。いわゆる一つの再帰下降型構文解析。 ループと分岐と関数呼び出しで書く例のやつです。 [src] #! perl -w # Parse ChangeLog # Copyright: (C) Project PaoPei with zuihu 2004 JAPAN # $Id: …

Parse-RecDescent Tutorial

http://www.perl.com/pub/a/2001/06/13/recdecent.html

カエルチュウイホウ - PlaggerでChangeLogを扱う(2)

http://kerolin.jspeed.jp/computer/linux/meadowger060611.html package Plagger::Plugin::CustomFeed::ChangeLog; use strict; use warnings; use base qw( Plagger::Plugin ); use Parse::RecDescent; use Text::Markdown 'markdown'; $Parse::RecDescent…

名づけのない再帰 fixed-point combinator

p.65 Types and Programming Languages より。afact は、引数に階乗関数を渡されたとき階乗関数になる関数。 つまり、階乗関数に適用すると階乗関数が帰ってくる関数。 #! /usr/bin/env perl use strict; use warnings; use integer; my $afact = sub { my $…

Elementary, ... Googleで「はらへった」と検索するとピザが届くようにするまで

http://e8y.net/blog/2006/07/25/p126.html Plagger のプラグイン作成事例として、とても分かりやすい。 何気なく使われている、Filterのあわせ技に注目。

Pragmas - perldoc.perl.org

http://perldoc.perl.org/index-pragmas.html Perl の基本構文をオーバーライドするプラグマ。演算子オーバーロードもあった。 (via T先輩のソース) #! /usr/bin/env perl use warnings; use strict; package Complex; use overload '+' => sub{ Complex->ne…

h-sequence

下記の構文にしたがって、受理非受理を決定 h = 0 | 1 h h LL(1)文法であり、1文字先読みで決定的(バックトラックなし)で解析を進めることができる。 use strict; use warnings; my @a = grep /[01]/, split //, scalar <STDIN>; sub f($$); sub f($$) { my ( $n,</stdin>…

learn.perl.org -- Beginning Perl

http://learn.perl.org/library/beginning_perl/ 入門書、PDF。 割とちゃんとしてると思う。

subtechグループ - tokuhirom@株主の日記 - first

http://subtech.g.hatena.ne.jp/tokuhirom/20051119/1132404752 $feed_url = (grep {$_->rel eq 'next'} @links)[0]->href; use List::Utils; $feed_url = (first {$_->rel eq 'next'} @links)->href; 俺はこっちの方が好き。どっちでもいいんだけどさ。「オ…

CPAN で Perl モジュールを全部更新

perl -MCPAN -e "CPAN::Shell->install(CPAN::Shell->r)" cpan シェルで r とやると、更新モジュールの一覧を取得できる。 それを全部 install に渡すというもの。

ChangeLog Merger

sort + uniq 機能つき。 #! /usr/bin/env perl use warnings; use strict; my @articles = (); # [id(date+author), begin, end] my @lines = <>; # collect ids and begins for my $i (0 .. $#lines) { if ( $lines[$i] =~ m/^(\d\d\d\d-\d\d-\d\d\s+.*)$/ …

one-liner Fibonacci

perl -e '$x=0;$y=1; ($x,$y)=($y,$x+$y)for(1..<>); print"$x\n"' ruby -e 'x=0;y=1; gets.to_i.times{y=x+y;x=y-x}; p x' Ruby の方が短い。

Plagger インストール

cpanで install Plagger 依存関係で入るモジュールについて色々聞かれる。 ほっとくとタイムアウトで落ちるっぽい。 辛抱強く答えていったら、インストールできた。

英数字アルファベット化

#! /usr/bin/env perl use strict; use warnings; my @a=qw(ZERO ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE); my $s = ''; while ( <> ) { chomp; s|[0-9]+|join ' ', @a[split //, $&]|exg; tr/a-z/A-Z/; s/[^A-Z ]//g; $s .= "$_ "; } $s =~ s/\n/ /g…