タグ

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

  • リストの要素数を取得する - 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
    yugui
    yugui 2007/11/16
    面白い
  • ||=とdoを使ってキャッシュ - Unknown::Programming

    たとえばメンバ変数にオブジェクトとかをキャッシュするときに、 sub method { my $self = shift; return $self->{hoge_obj} ||= Hoge->new; } とか良くやるんだけど、前処理とかが必要な場合はdo使って sub method { my $self = shift; return $self->{hoge_obj} ||= do { ### 前処理 Hoge->new; }; } こんな感じで良くやるんだけどもコレって一般的なのかな? 前にどっかのソースで、 sub method { my $self = shift; my $code = sub { ### 前処理 return Hoge->new; }; return $self->{hoge_obj} ||= $code->(); } っていう感じのを見たんだけどどっちがい

    ||=とdoを使ってキャッシュ - Unknown::Programming
    yugui
    yugui 2006/12/19
    なるほど
  • がんがんいこうぜ。 - Unknown::Programming

    なんかうちの会社にはこうバリバリプログラムやるぜって人があんまりいない。 だから新人教育しててもなんか肩透かし。いや、多分僕の教え方が悪いせいもあると思うけど。 ほんとのところ言うと今は教育とかよりも志の同じ人と共通の話題でお互い競い合ってバリバリ成長していきたい。 完全に井の中の蛙状態になってるなぁ。ちょっと外を見れば凄い人だらけなのにみんな自分の今の作業に忙殺されてて外見る余裕がないみたい。 そういう僕も日々の仕事に忙殺されてなかなか外に目を向けれない状態が続いているのだけれども。 まぁ最近は仕事が忙しいので一プログラマとして仕事してるんで誰かを教育したりってことはあまりないけどね。 あぁ、むしろ教育されてぇw 一応社内にも一人凄い人いることにはいるんだけど・・・、 つまり、プログラマと呼ばれる期間は、プログラマとしてのスキルが高い人ほど短くなり、低い人ほど長くなるという皮肉な状況にな

    がんがんいこうぜ。 - Unknown::Programming
  • PHPがどうにも好きになれない理由 - Unknown::Programming

    仕事PerlPHPも使うんだけど、どうにもPHPが好きになれない。 いったいなんでだろうか。先にPerlから入ったもんだから後から入ったPHPに対して不満があるのかな? ま、とにかく両方やっててPHPが微妙だなぁと思う部分を列挙してみよう。 ただPHPに関してそれほど詳しくないので間違っている部分もあるかもしれません。 あ、ちなみにここでいうPHPってのはPHP4(PHP4.4.1)のことです。 変数のtypeミス(strict 'vars') これが一番痛い。 まさしくPerlでstrictを使わずに実装してるような、そう、まるで先祖帰りしてるような感覚になってしまうので当につらい。 変数のスコープ 変数のスコープが関数単位でしか発生しないのが痛い。 これによりif条件の場合のみとかループ中でしか使わない変数とかを定義できない。 つまり、変数の存在範囲を細かく設定できないのだ。 配

    PHPがどうにも好きになれない理由 - Unknown::Programming
    yugui
    yugui 2006/09/10
  • Unknown::Programming - 何故Perlなのか。

    なんで僕はこうもPerlが好きなんだろう。 そして何故PHPが好きになれないんだろう。 前に「PHPがどうにも好きになれない理由 - Unknown::Programming」というエントリを書いたけど、なんていうかもしあの不満点が全部解決したとしてもおそらくPerl程好きになることは無いと思う。 やっぱり良くも悪くも初めて真面目に取り組んだのがPerlという言語だったからなのかなぁ。 専門学校時代にはC,C++,VBをやった。会社入ってからはJava(iアプリ)をちょっとやった後にWEBアプリケーション開発にまわされた。 そこで初めてPerlを触った。 初めて触った時には「なんだこのクソ言語」と思ったものだ。 Perlでやった初めての仕事は地獄だった。当に辛かった。 水も何も持たずに砂漠のど真ん中にいきなり放置されたような感じだった。 まず誰も何も教えてくれなかった。先輩は皆忙しそうで

    Unknown::Programming - 何故Perlなのか。
    yugui
    yugui 2006/09/10
    志高く
  • アクセサの作り方のまとめ - Unknown::Programming

    アクセサ(2) AUTOLOAD でアクセサ - ぱるも日記 アクセサの作成方法はいろいろあるけど自作するならAUTOLOADとか使わずに、 package Hoge::Class; use strict; for my $method (qw/age name tel hoge/) { my $code = sub { my $self = shift; $self->{$method} = shift if @_; return $self->{$method}; }; no strict 'refs'; *{$method} = $code; } って感じでクロージャと型グロブで定義すればいいかと。 AUTOLOAD使うなら使うで、初回呼び出し時にメソッド定義してしまうのがセオリーなんで、 二度目以降はAUTOLOADが呼び出されなくなるから遅いという問題は解決するかと。 sub A

    アクセサの作り方のまとめ - Unknown::Programming
    yugui
    yugui 2006/05/23
    AUTOLOADで
  • 結局どこまで勉強(or教育)すればいいんかね - Unknown::Programming

    先日書いた記事新人教育 - Unknown::Programmingのトラバやはてブとか読んでてあーやっぱりオールドファッションPerlも未だに廃れてはいないんだなぁと実感させられました。 あの一覧全てを仕事で使うか?と問われると、ま確かに頻繁には使わないけどいやでも場合によっては結構使うよと。 なのでPerl仕事するなら必須項目であると言えますね。 知らないとまずCPANモジュールのソースが読めないし。 問題にブチ当たった時に困ったりする。 どこバグってんのかとかわかんないってことになるわけです。 COREパッケージ知らないと組み込み関数と同じメソッド定義した時にうがーってなるし、 UNIVERSALパッケージ知らないとisaとかcanメソッドがどっからやってきたのかわかんないし、 AUTOLOADメソッド知らないと謎のメソッドに悩まされるし、 tie変数知らないともの凄い不思議なハ

    結局どこまで勉強(or教育)すればいいんかね - Unknown::Programming
    yugui
    yugui 2006/05/10
    自分としては少なくともレベル9まではいつかは登りたいものだ。教育するのはレベル6まででいいんじゃない?
  • 関数の出口の数について - Unknown::Programming

    404 Blog Not Found:perl - even more best practices 色々やり取りがあってなかなか興味深いなーとか。 でこの中で「無精で短気で傲慢なプログラマ」さんが関数の戻り値は基はひとつが良いとか書かれてたんだけどそれってどうなの? 確かに専門学校時代には先生からそんな風に教えてもらった記憶があるけど、 無理に出口をひとつにするのは可読性を悪くするだけだと思うんだけどなぁ・・・。 例を挙げると ■インデントが深くなりやすい 弾さんも言ってましたけどこれはかなりのデメリットです。 コードが縦にも横にも長くなりやすいです。 ■戻り値用の一時変数を用意 出口をひとつにするってことは戻り値用の変数を用意してそいつをずっとみてまわらないといけなくなりますよね。 =head2 func() 適当な関数の仕様 引数が渡されなかったら戻り値なし。 引数が未定義だったら

    関数の出口の数について - Unknown::Programming
    yugui
    yugui 2006/05/05
    やっぱりMozillaコーディング規約が好きかな。
  • 新人教育 - Unknown::Programming

    明日からちょっと遅めのゴールデンウィークということでなんか更新しとくか。 まっさらな新人にPerl教えるのって当にきついですね。 専門学校レベルのC言語しかやったことないとかいう人は配列やfor文を凄く好む。 ハッシュやforeach使えよと。 はたまた学校でPerlやってましたとか言う人もstrictってなんですか?ってな状態だし。 というかね、専門学校で教えられてるPerlのレベルがね、10年くらい時が止まってるんじゃねーのか、と思うくらいレベルが低いのがなんとかならんかなと。(ということはPerlでOOPとかstrictとかCPANとかを教えてくれるような専門学校があったら凄い生徒集まるんじゃない!?いやいや、世の中はPHP主流になりつつあるらしいぞ) いや、まとにかく勉強しないといけない項目を箇条書きでざーっと上げてみようか。 foreach文 ハッシュ 配列操作関数push,s

    新人教育 - Unknown::Programming
    yugui
    yugui 2006/05/05
    Perlの新人教育項目チェックリスト
  • 1