タグ

ブックマーク / fbis.hatenablog.com (51)

  • Hello Worldって、ちょ、ま。 - Unknown::Programming

    で、バトンははてブのid callでまわしとくのでよろしく>各位 404 Blog Not Found:perl - Hello World! バトン ちょw IDコール飛んできたけどちょっとおかしくね? otsune、miyagawa、takesako、yappo、fbisって俺だけ完全に浮いてるじゃ・・・。 ま、まーいー。折角弾さんからのご指名なのでなんか書こう。 ・・・とはいえ、既に弾さんの方で「リストA」から「リストF」まで6つのHelloWorldパターンを書いておられるので正直もう僕ごときが出せるネタがありません。 なので「リストG」は弾さんに実装してもらおうと思います。 use Web::Scraper; use URI; my $list_map = { A => 0, B => 1, C => 2, D => 3, E => 4, F => 5, G => 6, }; m

    Hello Worldって、ちょ、ま。 - Unknown::Programming
    otsune
    otsune 2008/05/06
  • mapと非破壊 - Unknown::Programming

    http://d.hatena.ne.jp/kazukichop/20080124/1201146190 Perl分かってない - Lism.in * blog - nekoya (id:studio-m) あんまり元記事とカンケイなかったりするけど、一応。 print join "\n" , map { s/a/A/g; $_ } @list; この書き方は@listを破壊してしまう。 無論、破壊されても構わない場合はこれでもいいが、mapを使っているということは基的には破壊されたくないはずだ。(でしょでしょ?) 破壊させる目的ならば個人的にはforeachを使う方がいいと思ってる。 s/a/A/g foreach @list; print join "\n" , @list; ま、それでもmapを使って値を変更しつつ@listを破壊したくないのであれば print join "\n"

    mapと非破壊 - Unknown::Programming
    otsune
    otsune 2008/04/28
  • PerlとPHPのソート処理 - Unknown::Programming

    良く書き方を忘れがちなソート。 特にPerlPHP両方使ってるとPerlはこうだけど、PHPはどうだっけ?とかよくあるのでここらでまとめをしておく。 配列を文字列で昇順・降順ソート # 昇順 @sarray = sort @array; @sarray = sort { $a cmp $b } @array; # 降順 @sarray = sort { $b cmp $a } @array; Perlのsort関数はブロック表記を省略するとデフォルトで昇順ソートになります。 <?php // 昇順 sort( $array , SORT_STRING ); // 降順 rsort( $array , SORT_STRING ); PHPのsort関数は引数に渡された配列をソートする。 第二引数を指定しなくも動くには動くが、省略すると値に数値と文字が混在してるときにおかしくなるので明示的に

    PerlとPHPのソート処理 - Unknown::Programming
    otsune
    otsune 2008/04/28
  • TAPの話 - Unknown::Programming

    http://d.hatena.ne.jp/tokuhirom/20080305/1204677112 404 Blog Not Found:「同じコード」の同じって何さ - TAPのススメ 弾さんの記事見て思い出した。 以前、id:tokuhiromさんに教えてもらったTAPの話ですが、折角なので導入しよーかと。 PHPHTML_FillInFormのテストをTAP形式に。ってかもともと出力はTAP形式になってたので、今回の変更点としては、 #!php <?php error_reporting( E_ALL ); require_once 'Test.class.php'; plan(1); require_ok('HTML/FillInForm.class.php'); こんな感じで一行目に#!にphpを指定しとけばOK。 これでPerlのproveコマンドが使えるお!素晴らしい!

    TAPの話 - Unknown::Programming
    otsune
    otsune 2008/03/28
  • mapで要素除去 - Unknown::Programming

    意外と知られてないかと思ったのでメモ。 grep {$_} map { $_ ? $N/$_ : undef } @_; って書くの? mapで特定要素を除外したいときとか - ロックスターになりたい mapを使って特定の要素を除去する方法ですが、上記の方法はこの用途であれば問題ないですが、undefという要素もちゃんと要素として見なしたい場合には困ります。 で、どうするかというと、mapの戻り値に空リストを返すことで要素の除去ができます。 my $n = 1000; my @array = (2, 1, 0, -1, -2); my @new_array = map { $_ ? $n/$_ : () } @array; たまーに使うので覚えておくと吉です。

    mapで要素除去 - Unknown::Programming
    otsune
    otsune 2008/02/09
  • 携帯の公式のユーザIDを取得する - Unknown::Programming

    昨今のHTTP::MobileAgentのプラグイン話を真っ向から別の道に行ってる感はややありますが、前回作った携帯のユーザーIDを取得する - Unknown::Programmingのキャリア公式版です。 ネーミングですが、前回のがHTTP::MobileUserIDだったのに対して今回はHTTP::MobileUIDです。ややこしいったらありゃしない。 package HTTP::MobileUID; use strict; use warnings; use base qw/Class::Data::Accessor/; __PACKAGE__->mk_classaccessors(qw/agent uid convert_uid/); our $VERSION = '0.01'; sub new { my $proto = shift; my $self = bless {} ,

    携帯の公式のユーザIDを取得する - Unknown::Programming
    otsune
    otsune 2008/01/22
  • Perl Tips - Unknown::Programming

    PerlのTipsになりそうなものを過去ログから引っ張り出してみました。 ランダムな文字列を生成するString::Random - Unknown::Programming local our $hoge; - Unknown::Programming whileでファイルハンドルをループする時の暗黙の$_について - Unknown::Programming リストの要素数を取得する - Unknown::Programming Perl6::Say-0.10 - Unknown::Programming クラスメソッドのインポートをModule::Compileでやっちゃう。 - Unknown::Programming メソッド呼び出しで継承する - Unknown::Programming どう書くでリハビリ - Unknown::Programming メソッド名一覧どーかく?

    Perl Tips - Unknown::Programming
    otsune
    otsune 2008/01/17
  • Catalystのhome取れなくて急にハマった - Unknown::Programming

    久しぶりにCatalystを触ってハマったのでメモ。 ある環境では動くのに別の環境に移したら急にmyapp.ymlが読み込めなくてエラーになったんだけど、どうやらhomeの値がヘンな値になってるっぽい感じだったので急いでたのもあってとりあえずMYAPP_HOMEという環境変数にhomeのパスを直指定してなんとか動くようになったわけです。 元の環境ではMYAPP_HOMEなんて使わなくてもちゃんとhomeの自動取得がうまくいってたのにおかしーなーなんでかなーと思ってたわけですよ。 で、まぁ次の日Catalystのソースを見てびっくり。 homeの取得はCatalyst.pmのsetup_homeメソッドで行われています。 # Catalyst-v5.7011 sub setup_home { my ( $class, $home ) = @_; if ( my $env = Catalyst

    Catalystのhome取れなくて急にハマった - Unknown::Programming
  • リストの要素数を取得する - Unknown::Programming

    配列ではなくてリストの要素数を取得するのにはどうすればよいか?というお話。 まず配列の場合はスカラコンテキストで評価するだけなんでとても楽。 my @data = qw/ a b c d /; my $count = @data; # 4 ではリストの場合はどうなるか? 配列と同じように書くなら my $count = qw/ a b c d /; こうなるが、これは大間違いである。 リストをスカラコンテキストで評価すると最後の要素が返ってくるのでこの場合$countには「d」が入る。 とするならば一度配列で受け取り、その後にスカラコンテキストで評価するのが一番スマートなのかもしれない。 my $count = my @tmp = qw/ a b c d /; # 4 しかしながら要素数を取得するだけなのに@tmpを広いスコープに置くのが嫌なのであればdoを使って囲ってしまうのが吉であろう

    リストの要素数を取得する - Unknown::Programming
    otsune
    otsune 2007/11/16
  • $_[0]の謎は偶然の産物 - Unknown::Programming

    勘違いしてしまうのしょうがないね。 また、ワーク変数にリファレンス値を代入後、デリファレンスすると元の値にアクセスが出来ます。 しかし、$_[0] を直接デリファレンスした $$_[0] では、元の値にアクセスが出来ません。 ワーク変数と$_[0]の中身は、同じリファレンスが入っているにも関わらず、そうなるのです(謎)。 Perlの関数引数 $_[0]の謎 - 燈明日記 元記事の現象とは下記のようなコードを書いた時の話ですが、 use strict; sub hoge { print $$_[0]; } my $str = 'aaa'; hoge(\$str); これを実行してもprintで何も出力されないというわけですね。 実はこれ、謎でもなんでもなくて単にデリファレンスの優先順位が配列参照よりも低いから起こってるだけです。 つまり上記のコードは@_の0番目の要素をスカラデリファレンスし

    $_[0]の謎は偶然の産物 - Unknown::Programming
    otsune
    otsune 2007/06/26
  • スライス&x演算子で初期化、よりもmapが好き - Unknown::Programming

    僕はmap派かなぁ。 Catalystのソースを見ていたら二項演算子スライスを使ってハッシュの初期化をしていた - kopug memo スライス&x演算子使うやり方だとmy宣言と同時に書けないからあんまり好きくない。 my %hash = map { $_ => 1 } @key; # myと同時に書ける my %hash; @hash{ @key } = (1) x @key; # myと同時に書けない もっと言えば初期化の為に@keyとかを用意しなくて済むし。 my %hash = map { $_ => 1 } qw/a b c/; 予め%hashや@keyが存在しているような状況ならスライス&x演算子使ってやることもあるけどね(元記事のCatalystのコードがまさにそう)。 ただ、x演算子で気をつけないといけないのがリファレンスを使って初期化するとき。 use Data::Du

    otsune
    otsune 2007/06/25
  • 国民の祝日の名称を取得するモジュール - Unknown::Programming

    昨日の続き。 Calendar::Japanese::Holidayなるものを触ってみた - Unknown::Programming いや、続きというか昨日も言ったように僕も前に作ったやつがあるので折角だし公開しよーかなと。 DateTime::Holiday::Japaneseという名前で作ってあるんだけど、名前空間的にDateTime使ってるということもありその辺良くわかんないので、CPANにはあげてません。 →DateTime-Holiday-Japanese-0.01.tar.gz ソースは以下 package DateTime::Holiday::Japanese; use strict; use warnings; use DateTime; use UNIVERSAL::require; use Class::Inspector; use utf8; use base qw

    国民の祝日の名称を取得するモジュール - Unknown::Programming
    otsune
    otsune 2007/06/17
  • PHPネタ盛り上がってますね - Unknown::Programming

    404 Blog Not Found:そろそろPHPに関して一言いっとくか 前に言いたいことは言ったのであまり言うことは無いですが、トラックバックとか見てるとちょっとだけ気になった点が。 PHP使えば導入が簡単だとかWebアプリがサクっと作れるとか技術者要らずだとか言ってる人が結構いてかなりびっくり。 えっと、これだけは言っておきますが結局どの言語だろうがセキュアなアプリケーションを作ろうと思ったらかなりの労力を必要とします。 PHPだろうがPerlだろうが、です。 でPHPの場合、導入ばかりが簡単だと皆が言うからセキュアでないアプリケーションが世に溢れてる気がします。 何も考えずに作るのならそりゃPHPの方が色々一発でできるんだから簡単でしょう。 ちゃんと作るのなら結局PHP使ったとしてもそんな劇的に楽になることはありません。 むしろ僕はPHPの方がそういう面で作りにくいと感じています。

    PHPネタ盛り上がってますね - Unknown::Programming
    otsune
    otsune 2007/05/26
  • HTTP::MobileAgent::Plugin::UserIDの方がいいのかも - Unknown::Programming

    あんまりHTTP::MobileAgentが肥大化していくのがどうなの?っていうのとユーザID取得するモジュールがないっぽかったので切り離して作ってみたんだけども、やっぱりHTTP::MobileAgentオブジェクトから$agent->user_idとか呼べた方が良いのかもしれない。 個人的には分かれてるほうが保守しやすいと思うのでHTTP::MobileUserIDはこれでおきつつ別途Pluginを作ってみたり。 package HTTP::MobileAgent::Plugin::UserID; use strict; use warnings; use HTTP::MobileUserID; our $VERSION = '0.01'; no strict 'refs'; for my $accessor (qw/user_id is_supported_user_id/) { *

    HTTP::MobileAgent::Plugin::UserIDの方がいいのかも - Unknown::Programming
    otsune
    otsune 2007/05/07
  • 勝手に添削を添削 HTTP::MobileUserID - Unknown::Programming

    うぉぅ。弾さんから初の添削頂きました。 #あ、ちなみにパッケージ名だけどHTTP::MobileAgentと揃えるためにJapaneseは無しにしました 携帯のユーザーIDを取得する - Unknown::Programming 404 Blog Not Found:perl - 勝手に添削 - HTTP::MobileUserID::Japanese コードそのものというより、メソッド名がまずい。is_support()では英語になっていない。日専用モジュールではあるけど、CPANとかにうpするとしたら、これだとキョーレツに違和感がある。正しくはis_suppoted()またはis抜きのsupported()。 is_exists()の方は、has_user_id()が望ましいだろう。 きゃああ。これは恥ずかしい。 なんでもかんでもis_をつければそれっぽいっしょと考えてることがバレバ

    勝手に添削を添削 HTTP::MobileUserID - Unknown::Programming
    otsune
    otsune 2007/05/07
  • 携帯のユーザーIDを取得する - Unknown::Programming

    DoCoMoの場合は端末ID、SoftBankの場合はユーザID、AUの場合はサブスクライバIDを返すというもの。 CPAN漁ってみたところ、一応HTTP::MobileAgent::Plugin::ExtensionやSledge::MobileGate::Mobileとか携帯のIDを取得できるヤツはあった。 だけど、HTTP::MobileAgent::Plugin::ExtensionはSoftBankのときにUAから取得できるシリアルナンバーしか取れない。あとDoCoMoのis_utnの判定がhtml_version取得できない場合に未対応になるのがどうにもいけてない。 一方Sledge::MobileGate::MobileはユーザID取れるには取れるんだけど取得できなかった場合にシリアルナンバー返すんでちょい微妙。というかどっちにしろSledgeしからしか扱えないのでもっと汎用

    携帯のユーザーIDを取得する - Unknown::Programming
    otsune
    otsune 2007/05/07
  • Catalyst::Plugin::Charsets::Japaneseで絵文字が化ける - Unknown::Programming

    うおー。そうだよ携帯向けサイトなのに携帯の絵文字のことをすっかり忘れてた。 でCatalyst::Plugin::Charsets::JapaneseでUTF8->SJIS変換すると絵文字が化けるわけです。 というわけで緊急で必要になったのでとりあえず対応ということでCatalyst::Plugin::Charsets::Japanese::Mobileというのを作りました。 package Catalyst::Plugin::Charsets::Japanese::Mobile; use strict; use Catalyst::Plugin::Charsets::Japanese; use base qw/Class::Data::Inheritable/; use Unicode::Japanese; use NEXT; __PACKAGE__->mk_classdata('cha

    Catalyst::Plugin::Charsets::Japaneseで絵文字が化ける - Unknown::Programming
  • UNIVERSAL::whichで取得できるメソッド名が違うケース - Unknown::Programming

    UNIVERSAL::which、便利なんでちょいちょい使ってるんですが、ちょっと微妙なケースが。 こういう場合。 package Foo; sub hoge {} package Bar; *muge = \&Foo::hoge; use UNIVERSAL::which; print scalar Bar->which('muge'); これを実行すると Foo::muge と表示されるわけです。 見ればわかると思いますが、Fooにmugeなんてメソッドは存在しないわけでして。 なんでこんなことになっちゃうかというとwhichの引数で渡された値をそのまま使ってるのが問題なんですね。 同じ理由で下記のようなコードも package Foo; my $code = sub {}; package Bar; *muge = $code; use UNIVERSAL::which; print

    UNIVERSAL::whichで取得できるメソッド名が違うケース - Unknown::Programming
    otsune
    otsune 2007/04/13
  • UNIVERSAL::cantなるものを触ってみた - Unknown::Programming

    ぼへーっとCPANのRSS眺めてたらUNIVERSAL::cantとかいうが目に付いたのでさっそく触ってみた。 以下概要のまんまだけど例。 if ( $obj->cant('hoge') ) { # hogeメソッドが存在しない } else { # hogeメソッドが存在する } つまりcanメソッドと逆の動きをするわけですね。へー。 メソッドが存在しないときを明示的に判定できるわけです。なるほどね。 ちなみにcant()だけじゃなくcan't()でも呼び出せます。これはシングルクォートが::と同じだということを利用しているわけですね。 ってことは勝手にcanパッケージにtメソッドを定義してることになるんでちょっと微妙といえば微妙なんですがまぁカブることもないだろうし見栄え的にいい感じなのでいいんじゃないでしょうか。 あとですね、来のcanメソッドは戻り値に関数のリファレンスを返してく

    UNIVERSAL::cantなるものを触ってみた - Unknown::Programming
    otsune
    otsune 2007/04/09
  • お世話になったPerl本のまとめ - Unknown::Programming

    僕が今までPerlの勉強、及び学習のために利用したPerl関連の書物についてのまとめをば書いてみます。 Perlデバッグ明快技法 作者: Martin Brown,岡田長治出版社/メーカー: オーム社発売日: 2001/05メディア: 単行 クリック: 1回この商品を含むブログ (4件) を見る まずは僕が始めて購入したPerl。 会社に置いてあったラクダをざっと一通り読み終わったときになんか自分でもが欲しいなと思ってたときに見つけた。 バグやエラーに対する心構えやstrictとwarningsの詳細な使い方と説明、シグナルハンドラについて色々と学ぶところがあって良かった。あとはプロファイラについての説明が熱くてこれを知った当時はプロファイラ使っていろんなプログラムの負荷テストとやってみたりしたもんだ。 最後に付録として診断(エラー)メッセージもついててナイス。 そういや診断メッ

    お世話になったPerl本のまとめ - Unknown::Programming
    otsune
    otsune 2007/04/06