2008年07月13日03:30 カテゴリLightweight Languages perl - Class vs. Closure PERL HACKS(日本語版) [英語版] うーん、さすがにそれはいいすぎでしょうか。 クロージャの概念をクラスとの対比でわかりやすく説明する。 - サンプルコードによる Perl 入門 ここで気づいてほしいことは、クラスとクロージャは、実は同じものだということです。たしかにオブジェクトの定義から行くと、 404 Blog Not Found:オブジェクトは難しくない。難しいのはクラス それで、オブジェクトとは何か、といえば、「自分が何が出来るのか[コード]を知っているデータ」ということになる。 であり、クロージャー(closure)は「自分が何を持っているか[データ]を知っているコード」なので、等価ではある。実際、 package Class; sub
継承 † Java public SubClass extends SuperClass { SubClass () { } } Perl package SubClass; use base qw(SuperClass); sub new { bless {}, shift; } 1; use base qw(SuperClass?)とすると、SubClass?はSuperClass?の(コンストラクタ含む)関数をすべて継承する。 ↑ interface † Perlにはinterfaceといった文法はない。実装をうまくつかってinterfaceを実現する。 親クラスで、関数の中身をdieだけにし、子クラスでオーバーライドを強制する*1 Java public interface Person { public void whatIsYourName(); } public Clas
こんにちは。$_たんだよ。 え、なんて読むのかって、$_ はダラーアンダーバーって読むんだ。(長っ!) だれか良いネーミングがあったら教えて。(^-^; というわけで、ここからは私がナビゲートするね。 でわ、
1.演算子の概要 演算子は、算術演算子に代表されるように、変数やリテラルなどの値に対して演算を行うための記号です。 演算子の中でも有名なのが、加算演算子や減算演算子などの算術演算子です。 Perl の組み込み演算子は、演算の対象となる値、『オペランド』の個数によって単数演算子、二項演算子、三項演算子に分類することができます。また、間値演算子か前置演算子か、数値、文字列、ファイルなど捜査対象によっても分類できます。ただし、これらの分類はプログラミングする上であまり重要ではなく、一つ一つの演算子を理解するためのものです。 用語 オペランド 演算の対象となる値。演算内容をあらわす記号は演算子と呼びます。例えば 10+X という式では、10 と X がオペランドで、+ がオペレータです。 演算子の優先順位 演算子には結合性と優先順位があります。 演算子の一覧 演算子 結合性 解説
僕は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
2006年09月08日05:00 カテゴリLightweight Languages perl - no warnings 'unintialized' はてぶ経由でCharsbarさんからも指摘あり。 [を] not defined とヒアドキュメント 昔はそうやっていたのですが、「use warnings」を使い始めたら、 警告 ("Use of uninitialized value ...") が出るようになったので、 いつも入れているのです…。これまたPerlの世界ではTMTOWTDIな対策があるのだけど、いい機会なのでここでその対策をまとめておきます。 no warnings 'uninitialized'; これが一番基本的な対策になります。Scope単位で有効なpragmaなので、 use warnings; sub foo{ no warnings 'uninitiali
Perlは強力な 正規表現 をサポートしています。正規表現とは、大まかにいうと、検索の機能を高度化しやすくしたものです。Perl以外のJavaやJavaSciptやPHPなども正規表現をサポートしていますが、Perlは古くから正規表現を本格的にサポートしています。 また、Perlの拡張正規表現は、Perl Compatible Regular Expressions( PCRE ) としてPerlの外でも使うことができるため、正規表現のディファクトスタンダードの1つとなっています。 パターンマッチング[編集] =~[編集] 二項演算子 =~ は、左辺のスカラー式を右辺のパターンマッチに拘束します。 正規表現に関する操作では、デフォルトで $_ という文字列を検索したり変更したりします。 この演算子は、そのような操作を他の文字列に対して行うようにします。 右辺は、検索パターン (//)、置換
研究内容 ここまで作成してきたsendmail.plライブラリですが、 環境(OSとか)によっては動作しないらしいことが分かりました。 その原因は、本来オブジェクトとして利用すべきJcodeを無理矢理?普通のパッケージとして扱っていたことにあるようです。 ここで、オブジェクトとはなにか、オブジェクトの関数呼び出しの方法を研究して、sendmail.plを修正します。 詳細 エラー原因究明 sendmail.pl を使用したCGIプログラムを作っていたら、次のようなエラーが出てしまいました。 Can't call method "euc" on unblessed reference at (eval 2) line 348. use CGI::Carp qw(fatalsToBrowser); を使っているので、普通はエラーが出るとファイル名なども表示されるのですが、 それがありません。
Data::DumperというのはPerlのモジュールです。とある仕事で教えてもらいましたが、便利です。 Perlのデータ構造を、そのままPerlコードとしてテキスト化してくれます。テキスト化したコードは、evalに与えるとそのままPerlとして解釈されます。その為、Data::Dumperでダンプしたコードをテキストファイルとして保存し、後ほど読み出してevalに与える、という形でデータ構造のシリアライズ/デシリアライズが可能です。 使い方はこんな感じ: use Data::Dumper; my %hoge = ("key1" => "val1", "key2" => "val2"); print Dumper(¥%hoge); 出力結果はこんな感じ。 $VAR1 = {"key1" => "val1", "key2" => "val2"}; "$VAR1"という変数名は勝手にDumpe
名前¶ Devel::Cycle - オブジェクトのメモリ循環を発見する 概要¶ #!/usr/bin/perl use Devel::Cycle; my $test = {fred => [qw(a b c d e)], ethel => [qw(1 2 3 4 5)], george => {martha => 23, agnes => 19} }; $test->{george}{phyllis} = $test; $test->{fred}[3] = $test->{george}; $test->{george}{mary} = $test->{fred}; find_cycle($test); exit 0; # output: Cycle (1): $A->{'george'} => \%B $B->{'phyllis'} => \%A Cycle (2): $A->{'ge
「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧
Perl has three built-in data types: scalars, arrays of scalars, and associative arrays of scalars, known as "hashes". A scalar is a single string (of any size, limited only by the available memory), number, or a reference to something (which will be discussed in perlref). Normal arrays are ordered lists of scalars indexed by number, starting with 0. Hashes are unordered collections of scalar value
変数は以下のように値を代入したり出力することができます。 # 変数に文字列を代入 $value = "テストです"; # 変数を出力 print $value; 【参照ページ】 変数 配列 複数の値を1つの変数で管理したい場合は、『配列』という変数が最適です。 配列を初期化する場合は、要素をカッコで囲み、各要素毎にカンマで区切ります。 @week = ('日曜', '月曜', '火曜', '水曜', '木曜', '金曜', '土曜'); 配列はインデックスを使って参照します。インデックスは 0から始まるので注意してください。たとえば1番目のデータ "日曜" を呼び出すときは、$week[0]、"月曜"なら $week[1] とします。 # 配列 @week の1番目の要素を表示 print $week[0], "\n"; > 日曜 # 配列 @week の2番目の要素を表示 print $
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く