perl

文字列処理いろいろ

内部エンコーディング http://app.blog.livedoor.jp/dankogai/tb.cgi/50276015 Perl 5.8では内部で扱う文字コードもUTF-8です。それ以外のUTFはすべてEncodeモジュールで扱うことが出来ます。 perlスクリプトはUTF-8で書くのが無難ということだね。なお、内…

Class::Data::Accessor

クラス変数へのアクセサ(継承可)を提供してくれるクラス。 インスタンスごとに値を変えることもできる。 use strict; use warnings; use Class::Data::Accessor; use base qw/Class::Data::Accessor/; #instance value def my $obj = bless { id => '001',…

型グロブ

テストコード use strict; use warnings; package Hoge; our $var = "hoge_var"; { our $var2 = "hoge_var2"; } package Foo; #%Hoge:: have hash keys named as var, var2 print join(', ', keys %Hoge::), "\n"; #%Hoge:: have hash values that are type …

OOP

クラスの基本 use strict; { package Person; use Carp qw(croak); #クラス変数 my $class_var = 'hoge'; #コンストラクタ sub new { ref (my $class = shift) and croak("warn: method 'new' is class method"); my $self = {Name => shift}; bless $self, …

シフト演算

perlでは算術右シフトはできないっぽい printf("-2 >> 1 is %d\n", -2 >> 1); 2 >> 1 is 2147483647 と表示される。試しに、自作関数で2進数表記にしてみると print &decimal2binary(-2), "\n"; print &decimal2binary(-2 >> 1), "\n"; sub decimal2binary {…

モジュールをつくってみる

http://itpro.nikkeibp.co.jp/article/COLUMN/20071011/284280/?P=2&ST=develop を参考にした自分用のメモ。必要なものはcpanでインストールしておく。 モジュールとテストをつくる 必要なコマンド $cd /home/user/workspace $module-starter --module=My::M…

DBIモジュールのインストール

CPANで install DBI install DBD::mysql とやったら、DBIはうまくインストールできたがDBD::mysqlがダメ。 mysql_configが見つからないのようなメッセージが出たので、 http://y-kit.jp/saba/xp/cpan.htm http://www.mail-archive.com/pylons-discuss@google…

パッケージ

パッケージの役割 名前空間を定義する。 デフォルトはmainパッケージ $var = "hoge"; sub func() { print "$var\n"; } #全部同じ値にアクセスしている print "$var\n"; print "$main::var\n"; &func(); &main::func(); 他パッケージからは完全修飾名でアクセ…

ourをもう少し詳しく試してみる

ourで宣言した変数はレキシカルスコープで、パッケージに属する。 完全修飾名でなくてもアクセス可。 コメントを受けて訂正。 ourで宣言した変数はパッケージに属し、グローバル変数となる。 パッケージ外からも参照でき、block scopeの影響を受けない。 参…

コンパイルと実行

perlは、コンパイラとインタプリタが共存した仕組みになっている。まず、テキストをコンパイラがコンパイルして行き、これを「コンパイルフェーズ」と呼ぶ。コンパイルフェーズに実行を行う事も出来る。コンパイルフェーズが終ると、コンパイラはコンパイル…

クロージャ

Perlにおけるクロージャとはスコープの外に出たレキシカル変数を参照するサブルーチンのこと。 テストコード my $closure; { my $count = 0; $closure = sub {print $count++;}; } $closure->() for (0..9); 実行結果 0123456789 つまり クロージャ使うと変…

スコープ

スコープ 宣言や動作の有効範囲。 以下の2つに大別できる(不勉強のため間違ってるかも、、、) レキシカルスコープ 構文構造のみから決定されるスコープのこと。 (実行しなくても見れば分かる) ダイナミックスコープ 実行時の関数の呼び出し関係で決定さ…

配列の書き方

テストコード use strict; use Data::Dumper;my @hoge = (1, 2, 3); my @test1 = ('hoge', \@hoge); my @test2 = ('hoge' => \@hoge);print Dumper @test1; print Dumper @test2; 実行結果 $VAR1 = 'hoge'; $VAR2 = [ 1, 2, 3 ]; $VAR1 = 'hoge'; $VAR2 = [ …

デリファレンスの記法

自分用メモ。 配列 リファレンスから、配列要素にアクセスするには $ref_array->[0] ハッシュ リファレンスからハッシュ要素にアクセスするには $ref_hash->{'key'}; サブルーチン リファレンスからサブルーチンを使うには $ref_sub->(@argv); my $ref_array…

evalを試してみる

引数の値をPerlのスクリプトとして解析し、実行します。変数の設定、サブルーチンなどの定義は、その後も有効です。返される値は、サブルーチン同様に、最後に評価した式の値か、return文の値です。 http://www.rfs.jp/sb/perl/05/eval.html ということは、…

PerlでFastCGIにTry!

Apache, Perl, FastCGIの組み合わせで、ちょっとしたアプリを書いてみようと思う。 OSはDebian。以下、メモ。 1.Apacheのインストール # apt-get install apache # apt-get install apache-dev 2.mod_fastcgiの組み込み # wget http://www.fastcgi.com/dist/…