タグ

ブックマーク / perl-users.jp (29)

  • Win32::GuiTest で Windows の GUI アプリをハックしよう

    的な書き方 use strict; use warnings; use utf8; # ↑ Perl ハッカーに DIS られなくなるおまじない # Win32::GuiTest を使うおまじない use Win32::GuiTest qw(:ALL); # 日語を使えるようにするおまじない UnicodeSemantics(1); # ここで Win32::GuiTest を使う マウスを動かす use strict; use warnings; use utf8; use Win32::GuiTest qw(:ALL); # 小数点もいけちゃう sleep 関数 use Time::HiRes qw(sleep); UnicodeSemantics(1); for (my $i = 0; $i < 500; $i++) { # 10 ms 待つ sleep(0.01); # マウ

    koko1000ban
    koko1000ban 2008/12/13
    オレオレ言語使ってる上にそのコンパイラがGUIでしかないという摩訶不思議環境でものすごい役に立つハック
  • 非破壊な s/// のススメ

    正規表現の置換でときどき困るのは、元の文字列が変更されてしまうことです。そのため、たとえば文字列を URI escape する際には、以下のように別変数にコピーした上で、正規表現を適用することになります。 my $escaped = $search_str; $escaped =~ s/([^0-9A-Za-z_.!~*'()-])/'%' . uc(unpack('H2', $1))/eg; my $url = "http://example.com/search?q=$escaped"; 以前、この点がめんどくさいなーとブログに書いたところ、kazeburo さん他に以下のようなテクニックを教えていただきました。 use List::MoreUtils qw(apply); my $url = 'http://example.com/search?q=' . apply { s/([^

  • エキスパートPerl - 変態モジュール総覧

    Perl の世界には、「変態モジュール」と呼ばれるモジュールがたくさん存在します。 これらは、モジュールの形態をとりながら、Perl の内部に踏み込み、蹂躙しているという恐ろしい存在です。 しかしながら、これらのモジュールは使いどころを間違えなければ非常に有用であり、あなたのプログラムに無限の可能性をもたらすことでしょう。 自分の足をどうやって撃ちぬくか、よく考えてからつかってください。 下記のモジュールたちは、それ自体が変態的なものもあれば、変態的なことをするときに使うモジュールもあります。 PadWalker PadWalker は変態モジュールの筆頭です。レキシカルスコープの変数を、レキシカルスコープの外から見たり書き換えたりできます。 peek_my peek_our peek_sub closed_over という4つの関数をサポートしています。 下記のようなありえない操作を可能

    koko1000ban
    koko1000ban 2008/12/11
    変態モジュール集
  • $@はグローバル変数

    あまり意識されていませんが、$@はグローバル変数です。気をつけないとおかしなことになります。以下のコードではdie()で例外を発生させているので「Error is Dummy error」と表示されるように見えますが、表示されません。 package Hoge; sub new { bless {}, shift } sub cleanup { # 色々処理 } sub DESTROY { my $self = shift; eval { $self->cleanup }; } package main; eval { my $hoge = Hoge->new(); die "Dummy error"; }; if ($@) { print "Error is $@\n"; } else { print "Everything OK!\n"; } evalがdie()によって終了し、スコー

  • B::Deparse - モダンなPerl入門 - モダンなPerl入門

    Perl は人間にやさしい言語です。フィーリングでソースコードを解釈してくれますが、ときどき気があわなくてプログラマがおもってるのと違う解釈をしてくれるときがあります。Perl がどういう風に解釈しているのかを知るのには B::Deparse が有効です。 % perl -MO=Deparse,-print -e 'xxx { die "SSS" }' do { die 'SSS' }->xxx; -e syntax OK このように、そのソースコードがどういう風に解釈されるのかということを教えてくれます。 また、応用するとコードリファレンスも解析することができます。 % perl -e 'use B::Deparse; print B::Deparse->new("-p", "-sC")->coderef2text(sub { 3+2 })'; { 5 } Perl は、ソースコードを最

  • Perl 5 今昔 - Perl-users.jp

    前は王道だったあの書き方も最近ではこうかな、というもの集です。 一般編 oldtype としたものもたいていは動きますし、環境の都合や軽量だなどの理由で普通に使われたりもします。そのへん勘違いなきよう。 CPANモジュールの検索 自動リダイレクトされるので知ってると思いますが。 oldtype: search.cpan.org modern: MetaCPAN CPANモジュールインストール oldtype: perl -MCPAN -e shell modern: cpan post modern: cpanm Module OR マッパー oldtype: Class::DBI, DBIx::Skinny modern: DBIx::Class, Data::ObjectDriver, Teng, Aniki テンプレートエンジン oldtype: HTML::Template, Te

  • Perl5 のオブジェクト指向を理解する - モダンなPerl入門

    Inside Perl5 OO 対象読者: 他の言語で OO したことあるっぽいひと/Perl4 でとまってるひと Class をつくる まずは点クラスをつくってみましょう package Point; sub new { my ($class, %args) = @_; # 第1引数はクラス名 bless({%args}, $class); # データを bless すると、オブジェクトになる } sub x { my $self = shift; # 第1引数は、インスタンス $self->{x} = shift if @_; # 引数があればセッター扱いになる $self->{x}; } sub y { my $self = shift; $self->{y} = shift if @_; $self->{y}; } このようにして作ったクラスは、下記のようにして呼び出すことができま

  • モダンなPerl入門 - モダンなPerl入門

    目次 Perlの概要 なにか なにか バージョン ラクダ画像とPerl 環境別インストール 基礎的なperldocコマンド 変数 スカラー(文字列・数値) 配列 ハッシュ リファレンス 条件分岐 if / elsif / else ループ foreach while デバッグ手法 print warn Data::Dumper YAML XXX ファイル操作 open() IO::File Path::Class stat() / -f / -d / -e / -x サブルーチン プロトタイプ 正規表現 メタキャラクター キャラクターセット データ tie Storable Encode 入出力の考え方 ワンライナー データベース DBI mysql PostgreSQL SQLite オブジェクト bless モジュール CPAN 各OSでのCPANのつかいかた WindowsでCPAN

  • HTTP::Engine - モダンなPerl入門 - モダンなPerl入門

    HTTP::Engine とは? HTTP::Engine プロジェクトは終了し、現在はメンテナンスフェーズに移行しております。HTTP::Engine をすでにつかっている場合は、無理に移行する必要はありませんが、今後あたらしくつくる場合には、Plack をご利用ください。 目次へ Last modified: $Date: 2008-05-22T09:21:23.154313Z $