2006-05-01から1ヶ月間の記事一覧

正規表現(8) 検索オプション /g

Perl での正規表現の勉強を続けます。検索オプションは、これまでに /i と /m について勉強しましたが、まだまだあります。 普通、パターンマッチングというのは文字列中で一番最初にマッチした結果を返します。これはつまり、同じ文字列に対して同じパター…

お休みしてました

ここ二日間、風邪をひいてダウンしてました。(x_x;) 最近の天気は移り変わりが激しく、傘を忘れて雨に打たれたのが良くなかったようです*1。皆さんもお気をつけください。それにしても、「五月晴れ」は一体どこにいっちゃったのでしょうね……。 ではでは、勉…

はてなダイアリー市民

気がついたら、この「ぱるも日記」を書き始めて一ヶ月経っていたようです。 すると、はてなからメールが。 本日より、palmoさんは「はてなダイアリー市民」になられましたのでお知らせいたします。 というわけで、はてなダイアリーの市民権を獲得したようで…

undefを含むリスト代入とlocaltime

先日勉強したリスト代入と左辺値に関して、H.I.さんよりコメントを頂きました。ありがとうございます。 H.I. 『リスト代入の左辺リストが 「要素が全て有効な左辺値でなければならない」こと の例外として、リスト代入の要素にはundefを指定することができま…

スライス

配列の添え字に「@arr[1,2,3]」のようにカンマ区切りで複数の数字を書くと、その配列の1番目、2番目、3番目の要素が入った新しい配列を得る事ができます。これを「スライス」と呼ぶそうです。「$arr[1]」と書く場合とは違い、返ってくるのが配列なので「@arr…

代入文の返り値

昨日の日記で「リスト代入」について調べましたが、そういえば「代入文」自体の「返り値」について勉強するのを忘れていました。 Perl の代入文は、代入を行なった後の「左辺」を返します。 例えば、以下のような時に便利です。 use strict; my ($x, $y, $z)…

正規表現(6) m// の返り値(キャプチャなし)

反応が頂けてとても楽しかったですが、そろそろ Perl の勉強に戻りたいと思います。(^_^)"text" =~ m/pattern/; で検索できますが、この文の返り値はマッチすれば真、マッチしなければ偽と書きました。確かにその通りのようなのですが、もう少し詳しく調べて…

正規表現(7) m// の返り値(キャプチャあり)

ここまでは、「キャプチャしない場合」のお話でした。つまり、正規表現にキャプチャの為の () カッコが含まれていない場合です。キャプチャが含まれていると、返り値としてキャプチャした文字列がリストになって返ってくるそうです。 どういう事か、スクリプ…

リスト代入と左辺値

1つ前のエントリで、「リストへリストを代入」というコードを書きました。先ほどのコードでは正規表現が入ってわかりにくいので、省略して書くと、以下のようなコードです。 ($ye, $mo, $da, $ho, $mi) = (2006, 5, 26, 15, 0); この時、$ye は 2006 に、$mo…

「ブログで勉強日記」の反応の反応

あなたがブログで勉強日記をつけるべき6つの理由 について、はてなブックマークを始めとする各所で反応を頂きました。ありがとうございます♪ 以下、反応の反応。 勉強日記というもの - Unknown::Programming 僕自身ももっとアグレッシブになんかやってみたい…

正規表現(5) キャプチャ

正規表現の中でカッコ ( ) を使うと、マッチした文字列の一部をキャプチャ(捕獲)して後で使う事ができます。これは、正規表現を使う上でとっても重要なテクニックです。 例えば m/aaa(bbb)ccc/ というパターンがあるとします。この検索パターンは「aaabbbc…

あなたがブログで勉強日記をつけるべき6つの理由

正規表現はほんの基礎しか解説しないつもりだったのに、ここ数日どんどん解説してしまいます。(笑) でも、他の人にわかるように書く事で、自分の理解が深まる気がします。こういったブログのようなパブリックなスペースでは、常に人の目を意識しなくてはいけ…

正規表現(3) 検索オプション /o

昨日に引き続き、Perlでの正規表現を勉強します。検索パターンは「m//」演算子で記述できるのでした。 m/Apple|Banana/ このパターンの場合、「Apple」「Banana」にはマッチしますが、「apple」や「BANANA」にはマッチしません。パターンは大文字小文字を厳…

正規表現(4) 検索オプション /m

他にも色々な検索オプションがあります。正規表現の中で「^」(サーカムフレックス)と「$」(ドル記号)はそれぞれ「文字列の先頭」「文字列の末尾」という意味を持っています。 use strict; $_ = "One Two Three Four Five"; print "$_\n"; print (/^One/ …

正規表現(1) 基礎知識

Perl の正規表現を勉強します。実のところ、僕は既に正規表現を他の言語で勉強したので、知っています。(^_^) でも、基礎知識を復習します。「正規表現」(regular expression)とは、文字列の中に「パターン」を見出して、文字列処理を抽象化できる、とても…

正規表現(2) 検索パターン

Perl で正規表現検索パターンを記述するには、前後を「m/」と「/」で囲みます。「m」は省略できます。 m/Windows (3\.1|95|98|NT|Me|2000|XP|2003|Vista)/ # m// 各種Windowsを検索 /Windows (3\.1|95|98|NT|Me|2000|XP|2003|Vista)/ # 上と同じ意味 文字列…

Ajaxイン・アクション欲しい!

プレゼント応募です。Perl は関係ないですね。(^_^;;) Ajax は JavaScript で XMLHttpRequest や Microsoft.XMLHTTP などを使って行なうブラウザ上での非同期通信です。ページの遷移が無い、使いやすいインターフェースが作れます。 JavaScript も面白いスク…

strict プラグマ

今までこの勉強日記に書いていたスクリプトには、strict プラグマを使っていませんでした。(プラグマ=use すると Perl の動作自体を変える事ができるモジュール) 短いコードばかりだったので、その必要もないかな、と思っていたのです……が、 iandeth. - P…

アクセサ(4) Class::Accessor

CPANからのインストールも済んだので、Class::Accessorの使い方を勉強します。 といっても、使い方はとっても簡単です。Class::Accessor を継承すれば mk_accessors というクラスメソッドが使えるようになります。このメソッドに「属性名のリスト」を渡せば…

CPAN

アクセサ(3) クロージャでアクセサ - ぱるも日記 Class::Accessor や Class::Data::Accessor については後日じっくり勉強したいと思います! という事で、勉強しようと思い、とりあえず「perldoc Class::Accessor」(Class::Accessor のドキュメントを表示す…

アクセサ(3) クロージャでアクセサ

先日の AUTOLOAD アクセサに関して id:fbis さんから言及を頂きました♪(初トラックバック!) アクセサの作り方のまとめ - Unknown::Programming アクセサの作成方法はいろいろあるけど自作するならAUTOLOADとか使わずに、 package Hoge::Class; use strict…

Class::Struct

もう少し現実的なアクセサメソッドの自動生成をするには……、とラクダ本を読んでみたら、標準モジュール Class::Struct が紹介されていました。C言語の構造体のような、簡単なデータクラスを作ってくれるモジュールです。 簡単な、といっても、かなり柔軟に作…

アクセサ(1) アクセサメソッド

オブジェクトがそれぞれ持っている変数の事を「属性」や「プロパティ」などと呼びますが、後からの変更に強くするため、こういった属性に外部からアクセスする時には、「アクセサ」と呼ばれるメソッドを通しますよね。 例えば C++ なら「obj」の「name」属性…

アクセサ(2) AUTOLOAD でアクセサ

普通にアクセサメソッドを宣言していたのでは、無駄が多いのが難点でした。 1つ考えたのが、AUTOLOADで存在しないメソッドが呼ばれたらアクセサとする方法です。 package Person; sub new { my $class = shift; my $self = { name => "Somebody", age => 0, …

OOP(6) AUTOLOADで英文を作る

存在しないメソッドが呼ばれた場合、UNIVERSALに定義されている可能性があるというのは勉強しましたが、実は他にもエラーにならない可能性があります。 それが AUTOLOAD (オートロード)と呼ばれる機能で、呼ばれたメソッドが見つからない時、代わりに AUTO…

メソッドサーチ

UNIVERSAL や AUTOLOAD を勉強しましたが、ラクダ本に書かれている「Perl がメソッドを探す順番」(メソッドサーチの順番)をまとめてみます。 use Student; my $palmo = Student->new(); $palmo->doit(); を実行した際に、Perl が doit メソッドを探す時の…

UNIVERSAL::can

UNIVERSALは全てのクラス共通の祖先ですが、それを利用して UNIVERSAL クラスに定義されている便利なメソッドを、どんなオブジェクトからでも呼び出す事ができます。 UNIVERSAL::can は、指定したメソッドのリファレンスを得る事ができます。もしメソッドが…

UNIVERSAL::isa

便利なメソッド UNIVERSAL::isa は、呼び出しに使ったオブジェクトのクラスが、指定したクラスと同じクラス、または継承しているか(is-a の関係かどうか)を確かめる事ができます。 例えば $a->isa("B") と書いた場合、$a オブジェクトが B クラスのオブジ…

OOP(5) 共通祖先 UNIVERSAL

use Student; my $palmo = Student->new(); $palmo->doit(); というコードが書かれているのにもかかわらず、Student クラスに doit メソッドが定義されていない時、C++などのOOP言語ではコンパイルエラーとなりますが、Perl ではエラーにならない場合があり…

OOP(4) 擬似パッケージ SUPER

メソッドのオーバーライドについては昨日勉強しましたが、今日はオーバーライドされたメソッド(親クラスのメソッド)にアクセスする方法を勉強します。 例えば、以下のようなクラスを作ったとします。 package Speaker; sub new { my ($class, $name) = @_;…