タグ

2015年4月1日のブックマーク (15件)

  • 型グロブを理解する 〜アスタリスクは怖くないよ(。・ω・)ノシ〜 - (゚∀゚)o彡 sasata299's blog

    2009年03月28日16:01 Perl 型グロブを理解する 〜アスタリスクは怖くないよ(。・ω・)ノシ〜 先日、tokuhiromさんの LWP::UserAgent::WithCache::Transparent を見ていて、 my $orignew = *LWP::UserAgent::new{CODE}; {CODE}って何だ!?と思ったので調べてみました。結論から言うと、これは型グロブです。まずは型グロブの簡単な説明から。 そもそもperlでは、(グローバルな)変数とか配列とかハッシュとかサブルーチンとかファイルハンドルなんかは全て一つのテーブル(シンボルテーブル)で管理されています。 ※レキシカル変数(my宣言する変数)はシンボルテーブルではなく、別テーブルで管理されています。 例えば、 #!/usr/bin/perl use strict; use warnings; ou

    akatakun
    akatakun 2015/04/01
    シンボルテーブルと型グロブ
  • 雑多の備忘録 - Perl/シンボルテーブル

    akatakun
    akatakun 2015/04/01
    シンボルテーブルをダンプする
  • シンボルテーブルについて - メメメモモ

    perlには、シンボルテーブルというものがあります。 このテーブルには、パッケージ名やサブルーチン名などが格納されています。 perlのコンパイラが参照するためにシンボルテーブルがあるのです。 シンボルテーブルは、パッケージ毎に存在します。 例えば、 mainパッケージには、「%main::」という名前のシンボルテーブルがあります。 Testパッケージには、「%Test::」という名前のシンボルテーブルがあります。 各シンボルテーブルには、パッケージの内容(変数名、関数名など)が格納されています。 シンボルテーブルの内容は、下記のように、プログラムから参照できます。 foreach $symname (sort keys %main::) { local *sym = $main::{$symname}; print "\$$symname is defined\n" if defined

    シンボルテーブルについて - メメメモモ
    akatakun
    akatakun 2015/04/01
    シンボルテーブルの使い方
  • シンボルテーブルの中身を覗いてみる - Perl入門ゼミ

    Perl › モジュール作成 › here Perlは、シンボルテーブルというものを持ち、プログラマーが、それを参照したり、変更を加えたりすることができます。Perlは、他の言語に比べて、柔軟で、高い適応力を持ちますが、その力をを生み出している機能のひとつがシンボルテーブルです。 シンボルテーブルは、%main:: という名前の単なるハッシュです。%main:: というハッシュから、実行されているスクリプトの持つすべてのサブルーチンとパッケージ変数を知ることができます。( レキシカル変数を除く ) シンボルテーブルの内容を覗いてみる # mainパッケージの内容を含むシンボルテーブル %main:: # %main:: の別名 %:: シンボルテーブルを通じて、パッケージ変数の内容を知る our $num = 1; ${$main::{num}}; 詳しい説明は、型グロブの解説で、説明しま

    シンボルテーブルの中身を覗いてみる - Perl入門ゼミ
    akatakun
    akatakun 2015/04/01
    シンボルテーブルとはインタプリタがパッケージを管理するためのハッシュである
  • Firefox と Greasemonkey とアフィリエイト泥棒 :: キミガタメ「ハ」

    Amazonアソシエイトのtakochu04-22って何? Mozilla Firefox 拡張機能スレッド Part12 より。 わたしも takochu04-22 という ID をよく見かけていました。 はてなの中の人の ID かなー、ぐらいに思っていて、たまに私のサイトでも見かけたときは amazlet が不調だったのだろうと、もう一度張り直していました。 しかし、実態は Greasemonkey による書き換えでした。 Greasemonkey は指定ドメイン・URIに対しJavaScriptによるユーザーサイドスクリプトを追加することの出来る Firefox の拡張機能です。ウェブページの見た目や機能をブラウザ側でカスタマイズします。好みのユーザースクリプトを追加することでページを読みやすくしたり、便利な機能を利用することができます。 まあ言っちゃ、結構なんでもありのエクステンシ

    akatakun
    akatakun 2015/04/01
    Greasemonkeyとは
  • かんま1/2 - 複数行リストとqw比較表 : 404 Blog Not Found

    2006年04月30日16:03 カテゴリLightweight Languages かんま1/2 - 複数行リストとqw比較表 Perl Best Practices Damian Conway その泉は怪傑溺泉。2000日前に怪傑Geekが溺れたという悲劇的な伝説があるのだよ。以来そこで溺れたもの皆Geekになってしまう呪い的泉! 活動日誌(2006-04-30)エー、コレハウツクシクナイヨ。 { hogehoge( a, b, c, ); } コレガタダシイアルネ。 _ nagaton (2006-04-30 12:41) ↑そんなの人それぞれでしょうよ。 ちなみにcの後のカンマは余計だなw ちなみに、我らがDamian先生の回答はこう。 Place a comma after every value in a multiline list. 複数行にまたがるリストでは、必ずカンマを

    かんま1/2 - 複数行リストとqw比較表 : 404 Blog Not Found
    akatakun
    akatakun 2015/04/01
    複数行に跨るときの尻カンマはベストプラクティス
  • perl - There's more than one best practice : 404 Blog Not Found

    2006年04月23日01:16 カテゴリWEB+DB PRESSLightweight Languages perl - There's more than one best practice こういう意見を待っていた。 無精で短気で傲慢なプログラマ | これ、読みやすいの? わたしなんかよりよっぽど perl を知っている人なのだろうから機能的な 点についてはコメントしないが、はたしてこの添削後のコードはきれいなのか? 実は、私が最初にRefactorしたものは以下のような感じだった。 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 4

    perl - There's more than one best practice : 404 Blog Not Found
    akatakun
    akatakun 2015/04/01
    return ifやnext if,last ifで読者の脳内スタックを減らそう!!
  • ソース読みのソース知らず : 404 Blog Not Found

    2006年04月11日01:26 カテゴリYAPC::AsiaArt ソース読みのソース知らず これ、Perlにも言えてるな(苦笑) The C Programmming Lanugage K&R 革命の日々!-誰も読まないOSのソース・コード 結局いいたかったのは Linuxはそんなにバグバグじゃないよ。コードの質たかいよ でもuglyな仕様は、すごいたくさんあるよ。そこはuglyさ加減を楽しもうよ C言語できなくても気にすることないよ。カーネル読んでいけばそのうち覚わるから 赤松ナントカはシッタカ・うそつき というより、ある程度以上の規模と歴史を持つソフトウェアなら、ほとんどこれが成立すると思う。 もう昨今のLinux KernelとかPerl5とかといったものは、もう原作者だって全貌を知らない。いや、そのモジュールの一つに過ぎないEncodeだってメンテナー全部知らない(爆笑)。だっ

    ソース読みのソース知らず : 404 Blog Not Found
    akatakun
    akatakun 2015/04/01
    ソースコードの読み方
  • きよへろのPerlコードをリファクタしようのコーナー No.2

    2回目やってるっぽいので、今回も私家版を書いてみる。 というわけで id:naoya からの今回の課題。 「スクリプトを実行することで、現在の日付を返すスクリプト」 やっぱり最初は localtime を素で使っちゃうよね。Perl の入門書にはおそらくほとんど localtime での例になってると思われます。しかし、僕なら Time::Piece を使う。 #!/usr/local/bin/perl use strict; use warnings; use Time::Piece; my $lt = localtime; printf "%s %s\n", $lt->ymd('/'), $lt->hms;なぜって、localtime の関数型インタフェースがださすぎるから。Matt Sergeant タンのTime::Piece を使えば組み込みの localtime が OO イン

    きよへろのPerlコードをリファクタしようのコーナー No.2
  • Scalar::Util::weaken()を使わない方法 : 404 Blog Not Found

    2005年10月13日01:41 カテゴリLightweight Languages Scalar::Util::weaken()を使わない方法 DESTROY()の問題は、reference countが0にならないと呼ばれない点にあります。 前回の例では、$aのreference countは0にならないので、確かにDESTROY()は呼ばれません。こういう場合、確かにScalar::Util::weaken()が便利ですが、以下の方法もあります。 package Object::A; use strict; our $GC = 0; sub new { my $class = shift; my $obj = []; return bless { obj => $obj }, $class; } sub obj{ shift->{obj} } sub create_b { my $s

    Scalar::Util::weaken()を使わない方法 : 404 Blog Not Found
    akatakun
    akatakun 2015/04/01
    循環参照によるメモリリークの解消
  • 基本はDESTROY() : 404 Blog Not Found

    2005年10月12日22:33 カテゴリLightweight Languages 基はDESTROY() 確かにScalar::Util::weaken()は便利だけど、一番基的なやり方の紹介がないのはいかがなものか。 naoyaのはてなダイアリー - リファレンスの循環参照によるメモリリークを Scalar::Util::weaken で解決する このどこかで、というのが曲者で、 もし A や B をインスタンス化している呼び出し元(クライアント)のコードでやるには、Object::A や Object::B の中の実装を知っていて且つそれを直接いじってやる必要がある(無論 OO 的にいけてない) A や B のメソッドのどこかでやる場合、どのメソッドが最後に呼ばれるか、というのを事前に知っている必要がある。Template Method パターンなどを使っている場合以外は微妙な

    基本はDESTROY() : 404 Blog Not Found
    akatakun
    akatakun 2015/04/01
    循環参照によるメモリリークの解消
  • 簡単!オブジェクト指向Perl パッケージ サブルーチン

    オブジェクト指向Perlのしくみを解説します。 Perlモジュールの作り方と使用法についても解説します。 [1] パッケージ名前空間をPerlではパッケージと言います。 デフォールトのパッケージは main パッケージです。 ただしファイルのなかにパッケージ宣言(package ...)の行があると、それ以降に書かれた「グローバル」変数(our 変数)やサブルーチンは、そこで宣言されたパッケージのものになります。 package Foo; our $name = "I am Foo!"; # $name はパッケージ Foo に入る。 # our は付けなくてもいい...。パッケージの及ぶ範囲(スコープ)はつぎに又、別のパッケージ宣言が来るまでずっと続きます。 但しパッケージ宣言がブロック {...} のなかで為された場合は、そのブロックが閉じたところでパッケージのスコープが消えます。 p

    akatakun
    akatakun 2015/04/01
    packageについて
  • perl - 複数パッケージを含むファイル : 404 Blog Not Found

    2006年12月02日03:30 カテゴリLightweight Languages perl - 複数パッケージを含むファイル ついでなので、perlのpackageについて。 odz buffer - Perl は 1ファイルに複数のパッケージを書けるはず・・・ 違いますよ、と突っ込もうと思ったけど、自信がないので確認(おぃ)。 Perl5におけるpackageというのは、単なるnamespaceの宣言に過ぎず、それ以上でもそれ以下でもありません。package Foo;というのは、「このlexical scopeにおけるnamespaceはFooである」という宣言なのです。なので、 ちなみに HTTP::Proxyの SYNOPSIS なんかみると、 { package FilterPerl; use base qw( HTTP::Proxy::BodyFilter ); # sni

    perl - 複数パッケージを含むファイル : 404 Blog Not Found
    akatakun
    akatakun 2015/04/01
    Packageの仕組み
  • SSSSLIDE

    SSSSLIDE
    akatakun
    akatakun 2015/04/01
    Graph::Easy,Text::TabularDisplay
  • forとforeachは同じ。そして、forの反復子変数はエイリアス。 - ちゃまぐの備忘録

    for と foreach は同じ for my @countries = qw/ Japan Korea China /; for my $country ( @countries ) { print "$country\n"; } 結果 Japan Korea China foreach my @countries = qw/ Japan Korea China /; foreach my $country ( @countries ) { print "$country\n"; } 結果 Japan Korea China forの反復子変数はエイリアス my @countries = qw/ Japan Korea China /; for my $country ( @countries ) { $country = uc $country; } print "@countrie

    forとforeachは同じ。そして、forの反復子変数はエイリアス。 - ちゃまぐの備忘録
    akatakun
    akatakun 2015/04/01
    for文の反復子変数は参照ではなく実体である