タグ

ProgrammingとPerlに関するagwのブックマーク (433)

  • Geekなぺーじ : HTTPクライアントの作成(HTTP::Liteを利用)

    ここでは、Perlを使ったクライアントの例としてHTTP::Liteを利用したクライアントを作ってみたいと思います。 HTTPクライアントサンプル 以下にHTTP::Liteを利用したクライアントを示します。 サンプルは、HTTPによって取得したHTML文を全てそのまま表示します。 bodyはHTTPのbodyであり、HTMLのBODYタグの中身ではないのでご注意下さい。 #!/usr/bin/perl use HTTP::Lite; $http = new HTTP::Lite; # URL部分を変更して下さい $req = $http->request("http://www.hogehogeURL.com/") || die $!; print $http->body(); exit;

  • HTML::TreeBuilderによるパース(Titleの取得):Geekなぺーじ

    ここでは、取得したHTTPメッセージのbody部分に含まれるHTMLを解析してタイトルを取り出す方法を説明したいと思います。 HTTPクライアントサンプル 以下にHTTP::LiteとHTTP::TreeBuilderを利用したクライアントを示します。 #!/usr/bin/perl use HTTP::Lite; use HTML::TreeBuilder; $http = new HTTP::Lite; # URL部分を変更して下さい $req = $http->request("http://www.hogehogeURL.com/") || die $!; $body = $http->body(); $tree = HTML::TreeBuilder->new; $tree->parse($body); $tree->eof(); print $tree->find("title

  • Geekなぺーじ : HTML::TreeBuilderによるパース(Headの取得)

    ここでは、取得したHTTPメッセージのbody部分に含まれるHTMLを解析してHeadセクションを取り出す方法を説明したいと思います。 HTTPクライアントサンプル 以下にHTTP::LiteとHTTP::TreeBuilderを利用したクライアントを示します。 今回のサンプルでは最後にas_HTMLを使っています。 HEADセクションには、多くのHTMLタグが含まれており、それをそのまま表示するには、as_textではなくas_HTMLで行う必要があります。 今回は、HTMLタグを表示したかったので、as_HTMLでprintしました。 #!/usr/bin/perl use HTTP::Lite; use HTML::TreeBuilder; $http = new HTTP::Lite; # URL部分を変更して下さい $req = $http->request("http://ww

  • Perl : HTML::TreeBuilderによるパース(リンクの取得)

    ここでは、取得したHTTPメッセージのbody部分に含まれるHTMLを解析してAタグ内に含まれるリンクURLを取り出す方法を説明したいと思います。 HTTPクライアントサンプル 以下にHTTP::LiteとHTTP::TreeBuilderを利用したクライアントを示します。 まず、Aタグを順次取得しています。 次に、取得したAタグに含まれるhref attributeをprintしています。 #!/usr/bin/perl use HTTP::Lite; use HTML::TreeBuilder; $http = new HTTP::Lite; # URL部分を変更して下さい $req = $http->request("http://www.hogehogeURL.com/") || die $!; $body = $http->body(); $tree = HTML::TreeBu

  • perl の作法 #5 ディスパッチテーブルの活用 | ブログが続かないわけ

    いきなり具体例から行こう。sub coloring { my ($color, $data) = @_; my $ret; if($color eq 'black') { $ret = "<font color=¥"#000000¥">$data</font>"; } elsif ($color eq 'red') { $ret = "<font color=¥"#FF0000¥">$data</font>"; } elsif ($color eq 'green') { $ret = "<font color=¥"#00FF00¥">$data</font>"; } elsif ($color eq 'blue') { $ret = "<font color=¥"#0000FF¥">$data</font>"; } elsif ($color eq 'white') { $ret = "<

    perl の作法 #5 ディスパッチテーブルの活用 | ブログが続かないわけ
  • ディスパッチテーブル - odz buffer

    ref:ブログが続かないわけ | perl の作法 #5 ディスパッチテーブルの活用 別に subroutine reference を使うこともないような。 my %colors = ( black => '000000', red => 'FF0000', green => '00FF00', blue => '0000FF', white => 'FFFFFF', ); sub coloring { my ($color, $data) = @_; if (exists $colors{$color}) { return qq{<font color="#$colors{$color}">$data</font>}; } return; } 場合によっては、subroutine reference の方がいいとは思うけど、この例の場合は単純に色の名前と対応するデータだけをテーブルに入

    ディスパッチテーブル - odz buffer
  • ITmedia エンタープライズ:第3回 XML::SimpleであらゆるXML文書を料理する (1/2)

    第3回 XML::SimpleであらゆるXML文書を料理する:作って学ぶ、今どきのWebサービス(1/2 ページ) RSSにおけるXML::RSSのように、専用のモジュールがある場合にはそれを使えばよいのですが、そうでない場合は汎用のXMLパーサーモジュールを使ってパースすることになります。今回は、XML::Simpleを使ってあらゆるXML文書を料理できるようにしてみます。 前回まででXML::RSSによるRSS料理方法は分かったとして、ではRSS以外のXML文書を料理する場合にはどうしたらよいのでしょう? RSSにおけるXML::RSSのように、専用のモジュールがある場合にはそれを使えばよいのですが、そうでない場合は汎用のXMLパーサーモジュール*を使ってパースすることになります。 XML文書からPerlのデータ構造を作るXML::Simple Perlの代表的なXMLパーサーである

    ITmedia エンタープライズ:第3回 XML::SimpleであらゆるXML文書を料理する (1/2)
  • naoyaのはてなダイアリー - Perlでモダンなネットワークサーバーを書くには

    Comet については、普及するかどうかという以前に、どう使えばいいのか、正しく使った場合に何をどこまでできるのか、という理解が共有されていないように思います。なので、(あくまで私見ですが) 使用したスライドの一部を公開したいと思います。よろしければごらんください。 サイボウズラボの奥さんによる Comet のサーバー周りの資料。すばらしい。C10K に対してどのようなアーキテクチャをとるのが良いかとの考察が特に勉強になりました。 また、問題や改善すべき点があれば、教えていただければ幸いです。 というので問題、改善すべきというわけではないですが Perl 周りの話で少し補足を。 資料中の「初心者へのオススメが PoCo::Server::HTTP でパフォーマンスが欲しい人には Sys::Syscall qw/:epoll/」の点。おそらく Perl でも epoll を使えますよというこ

    naoyaのはてなダイアリー - Perlでモダンなネットワークサーバーを書くには
  • String::Diff - Hatena::Diary::Neko::kak 500 Internal Server Error

    信頼のおけるブロガーのString::Diffを使ってみた。 すごい! 一部抜粋で use String::Diff; my($old, $new) = String::Diff::diff($old_entry->body, $self->stash->{entry}->body, remove_open => '<span class="remove_entry">', remove_close => '</span>', append_open => '<span class="append_entry">', append_close => '</span>', ); $self->stash->{old_entry} = $old; $self->stash->{new_entry} = $new; これだけ!すばらしい。 Kwikiをさわってて、Test::VimColorのわ

    String::Diff - Hatena::Diary::Neko::kak 500 Internal Server Error
  • 二度目の公開!電話番号の正規表現 : にぽたん研究所

    ※ 二度目の公開というタイトルにしましたが、三度目は予定していません。 2 年ぐらい前に、邦初公開!電話番号の正規表現というネタで、Regexp::Assemble という CPAN モジュールを紹介したことがありました。 あのモジュールを使うことによって、日で初めて、電話番号を正規表現で表わすという試みをしてみたのですが、該当エントリに書いた通り、 Number::Phone::JP の正規表現が今日現在でも正しいのかどうか等、未検証部分が異常に多いので、自己責任でお使いくださいw というものでした。 その後、Number::Phone::JP モジュール自体も、更新が面倒臭そうなものなせいか、全然更新されていなかったのですが、何やら今日更新版が出ている模様。 どうも作り直したっぽいかんじ。 で、早速ですが、最新版の正規表現テーブルを用いて、最新版の電話番号にマッチする正規表現を作っ

    二度目の公開!電話番号の正規表現 : にぽたん研究所
  • Natural Language Principles in Perl (ja)

    Perlの自然言語原理 by Larry Wall (Perl作者), " Natural Language Principles in Perl". Japanese: Daichi Mochihashi <daiti-m@is.aist-nara.ac.jp> (解説) 一度学んで、何度も使う 自然言語は一度学べば、何度も使うものである。ここから言語の設計者が学べるのは、 言語は学びやすさではなく、表現力の方に最適化されるべきだ ということである。ゴルフカーの運転を学ぶのは簡単だが、それでは やりたいことを表現することはできない。 しだいに学ぶ 人は自然言語を学ぶのを決してやめないという意味で、一度も自然言語を 学んでしまうことがない。 どんな人もかつて、何かの自然言語を完璧に学んでしまったことはない。 不幸にして, 直交性に対する要求から、多くのコンピュータ言語はいつでも 任意の自由

  • いやなブログ - スクリプト言語用のデバッガの使い方 - Ruby, Python, Perl

    スクリプト言語用のデバッガの使い方 - Ruby, Python, Perl スクリプト言語用の CUIのデバッガの使い方を簡単にまとめました。対象言語は Ruby, Python, Perl です。 私は C, C++ でプログラムを書いているときはデバッガ (主に GNU/Linux 上の gdb) を頻繁に利用します。しかし、スクリプト言語ではそれほどでもありません。これはおそらく次のような理由によります。 ビルドが不要なので printf デバッグが容易 (ある程度大きい C++ のプログラムではビルド時間が長いので printf の挿入はしんどい) 異常終了時にスタックトレースが表示される (Ruby, Python なら自動、Perl の場合は use Carp; $SIG{__DIE__} = \&Carp::confess; など) オブジェクトのインスペクトが簡単 (Ru

  • PerlIO Layer で複数のオプションを使う - odz buffer

    PerlIO::gzip を使うと、 open my $fh, '<:gzip', $filename or die; で、gzip 圧縮されたファイルを直接扱える。これと open my $fh, '<:encoding(utf-8)', $filename or die; なエンコーディング指定を同時に指定するにはどうすれば良いかと聞かれたんだけども、そんなことをしたくなったことがなかった知らねー。 てことで、ちょっと試してみると。 open my $fh, '<:gzip:encoding(utf-8)', $filename or die; な感じでいいっぽい。:gzipと:encoding(utf-8)の間にはスペースが入っても良いみたいだけど。 で、ついでにPerlIO::viaを使えば PerlIO Layer に直接フィルタモジュールを挟みこめるということを、初めて知った。

    PerlIO Layer で複数のオプションを使う - odz buffer
  • odz buffer - null filehandle

    Perl で、標準入力のエンコーディングを指定するには binmode を使えばいいけど、 while (<>) { }な null filehandle を使うときは use open を使わないといけない罠。 まぁ、当然といえば当然だけど、知らなかったらはまるよな。引数を指定せずにパイプかリダイレクションを使うと動くし。

    odz buffer - null filehandle
  • それ use open - odz buffer

    しかし、 test.pl < utf8.txtは行けるが、 test.pl utf8.txtはだめ。 前にも書いたけど、引数を指定した場合、<> は STDIN じゃないですから当然ですね。とりあえず use open IN => ':utf8'; とするほうが、スマートといえばスマートか? や、Encode::decode を使うのが駄目ってことはないと思うけど。 追記 dankogai さんから Trackback が飛んできて気づいたのだが、書き方が分かりにくいな。ここでは、 use strict; use warnings; use utf8; use open IN => ':utf8'; binmode STDOUT, ':utf8'; while (<>) { print if /[ぁ-ん]/; } とするのではなくて、山下さんの元のプログラムに対して use open を追

    それ use open - odz buffer
  • それ内部イテレータ - odz buffer

    ref:404 Blog Not Found:perl - 格子点を生成する関数の生成 うはは、無理矢理。コードを生成して、eval するなら、そりゃそっちのが速いよなぁ。 つうか、逆転の発想というより、そりゃ外部イテレータが内部イテレータに変わっているって話だ。いやまぁ、別にいいっちゃいいんだけど、内部イテレータ有りならもっと素直に書いてたな。こんなの。 use strict; use warnings; sub mesh_iterate { my ( $sub, @points ) = @_; my $base = pop @points; unless (@points) { for my $i (@$base) { $sub->($i); } } else { mesh_iterate( sub { for my $i (@$base) { $sub->( @_, $i ); }

    それ内部イテレータ - odz buffer
  • perl - 格子点を生成する関数の生成 : 404 Blog Not Found

    2007年02月02日23:00 カテゴリLightweight Languages perl - 格子点を生成する関数の生成 こういう別解もありますと言ってみるテスト。 odz buffer - 格子点の生成 任意次元の格子点を(大量のメモリを使うことなく)生成するコードを出来るだけ汎用的に書いてみるテスト。 Python ならかなり簡単に書ける。generator(コルーチン)万歳。 Perl ならこんな感じ?めんどい。 sub make_mesher { my ( $start, $end ) = @_; my $loop = 'LOOP'; $loop =~ s{LOOP}{ "for my \$i$_ (\$start->[$_]..\$end->[$_]){LOOP}" }ex for ( 0 .. @$start - 1 ); my $args = join ",", map

    perl - 格子点を生成する関数の生成 : 404 Blog Not Found
  • 格子点の生成 - odz buffer

    任意次元の格子点を(大量のメモリを使うことなく)生成するコードを出来るだけ汎用的に書いてみるテスト。 Python ならかなり簡単に書ける。generator(コルーチン)万歳。 def mesh(*points): if len(points) == 1: for x in points[0]: yield [x] else: for point in mesh(*points[:-1]): for x in points[-1]: yield point + [x] if __name__ == '__main__': for point in mesh(range(10), range(10), range(10)): print point Perl ならこんな感じ?めんどい。 sub mesh_iterator { my @coords = @_; my @indices = m

    格子点の生成 - odz buffer
  • [を] Dynamic Programming による類似文字列マッチの実装例

    Dynamic Programming による類似文字列マッチの実装例 2007-01-22-4 [Programming][Algorithm] 「Modern Information Retrieval」(8.6.1 p.216) での Dynamic Programming (DP) の解説のところのアルゴリズムを 素直に Perl で実装したみた。 さらにマッチ箇所取り出しロジックも実装してみた。 DP はいわゆる「類似文字列検索(あいまい検索)」に使うと 便利なアルゴリズム。 実は、大学院でも前の会社でも、PerlやらC++やらで実装して使ってた。 単純ながら使い勝手もよく、まさに現場向きかと。 grep 式に頭から見ていくので計算量的にはイマイチなのだが、 転置インデックス検索などで範囲を絞ってから適用すれば実用上問題ない。 ■定義みたいなの Q1. 二

  • 仙石浩明の日記: Perl の非同期I/Oモジュール POE を使って VPN-Warp relayagent を書いてみました

    多数の TCP/IP セッションを同時に維持する必要性などから、 非同期I/O が最近流行りのようです。 何をいまさら、という気もするのですが、 いわゆる「最新技術」の多くが 30年前の技術の焼き直しに過ぎない今日このごろなので、 非同期I/O 技術が「再発見」されるのも、 「歴史は繰り返す」の一環なのでしょう。 スレッドが当たり前の時代になってからコンピュータ技術を学んだ人にとっては、 (古めかしい) 非同期I/O が新鮮に映るのかも知れず、 なんだか「ファッションのリバイバル」に似ていますね。 Perl で非同期I/O 処理を手軽に行なうための枠組みとして、 POE: Perl Object Environment というものが あるようです。 POE を使うと、 あたかもスレッドを使っているような手軽さでプログラミングできます。 試しに VPN-Warp の relayagent を