
PerlTips
FrontPage > PerlTips
○Perl備忘録
関連:XmlRpc XML-RPCについて
■Jcode.pm インストール手順
http://rebecca.ac/milano/mt/readme/jcode.html
Jcode.pmがインストールされていないプロバイダーで、
管理者にJcode.pmを入れてもらえなかった場合に
Jcode.pmを使う方法。
これと「はてなでXML-RPC」に書いてあった
--
my($LIBDIR);
BEGIN {
if ($0 =~ m!(.*[/\\])!) {
$LIBDIR = $1;
} else {
$LIBDIR = './';
}
unshift @INC, $LIBDIR . 'mt/extlib';
}
--
を使えば、任意のPerl CGIでインストールできないモジュールを
使用できそう。
■RE:Jcode.pmの使い方を教えて下さい
http://www.docan.co.jp/~websemi/wsemi07.html
ここにあったサンプルプログラムにJcode.pmのパスを追加したら
Jcode.pmのサンプルはちゃんと動いた。
次はSOAP::Liteモジュールの動作確認だ。
■LWP::UserAgent?オブジェクトでリダイレクト先を取得する
GET,HEADの場合は自動的に取得してくれるそうです。
POSTの場合にうまくリダイレクトさせる方法
http://digit.que.ne.jp/work/index.cgi?Perl%a5%e2%a5%b8%a5%e5%a1%bc%a5%eb%2fLWP#i7
ただ、meta http-equivタブを解釈して読みに行くという話もあり。
http://altba.com/bakera/hatomaru.aspx/ebi/topic/349
■Perlモジュール/インストール(CPAN)
- ActivePerl?+CPANによるモジュールインストール方法。
http://digit.que.ne.jp/work/index.cgi?Perl%a5%e2%a5%b8%a5%e5%a1%bc%a5%eb%2f%a5%a4%a5%f3%a5%b9%a5%c8%a1%bc%a5%eb%28CPAN%29
ActivePerl?でモジュールをインストールする方法。
CPANとゆうのはPerlの標準モジュールが集まるところらしいです。
■Perlでインストールされているモジュールの一覧を確認する方法
http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%A4%CE%B3%CE%C7%A7
PerlにXML-RPC関係のモジュールをインストールするときのTips。
find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" > mod.txt
これで希望するモジュール名がない場合はppmで落とす。
■PPMの使い方
google:perl http プロキシ
Perlモジュールをコマンドひとつでネットワークからダウンロード
して、インストールまでできます。
PPMコマンド。モジュールを探してくる必要がありません。
これ非常に簡単。
PPMコマンドのプロキシ設定は環境変数 HTTP_proxy に
値を設定します。
SET HTTP_proxy=http://proxy.hoo.bar:8080
のように、先頭に http:// が必要。
参考:
http://www.att.or.jp/perl/faq/perlwin32faq/perlwin32faq11j.html#ppm_and_proxies
■Perlのパッケージ、モジュール、ライブラリという概念
Perl 5 モジュール用語集 ( larry用語ミニ教室)
http://www.att.or.jp/perl/module/mlstj1.html#1-1
たぶんここが一番解りやすい。
--
モジュールは、(.pmなしの)同名のクラスを(慣習として)提供するファイルです。
--
Chablo.pmというファイルの中にChabloというクラスを定義する。
■BEGIN、ENDという概念
BEGINはサブルーチンだが、sub BEGINと書かずにBEGINと書いてよい。
機能としては、ファイルが読み込まれた時に最初に実行される。
どこに書いていようが、最初に実行される。
ブロックというと解りにくいので、自動的に呼び出される
サブルーチンだと思えば良い。
あ、なんかコンストラクタっぽい。
■myという概念
my は my が書かれたブロックの中でその変数がローカルであることを
宣言する。
ブロック(package文とかサブルーチンとか)に囲まれていない所で
宣言した場合は、そのファイル内でローカルであることを宣言する。
これを宣言しておくと、他のサブルーチンやパッケージやファイルで
たまたま同じ名前の変数を使っていても、その変数の値が
参照されてしまう心配がなくなる。
■Perlのパッケージという概念
Perlのパッケージは名前空間の定義です。
同一のpackage文で区切った範囲が同一の名前空間として
扱われます。
ファイルAAAの中のXXXというサブルーチンとファイルBBBの中の
XXXというサブルーチンが衝突しないように、
それぞれの関数をパッケージで囲んでおくことができます。
・ファイルAAAの中でpackage LLL;の範囲にサブルーチンXXXを定義
・ファイルBBBの中でpackage MMM;の範囲にサブルーチンXXXを定義
としておくと、
require AAA.pl;
require BBB.pl;
と書けば、あとはどのファイルからでも
(ファイルAAAでもBBBでもその他のファイルであっても)
ファイルAAAの中のサブルーチンXXXは LLL::XXX という形式で、
ファイルBBBの中のサブルーチンXXXは MMM::XXX という形式で
呼出す事ができます。
http://perl.misty.ne.jp/19.html
パッケージ内のサブルーチンの呼び出し方は、Perl4とPerl5で
書式が異なります。
liblary::message1(); ← サブルーチンの呼び出し
&liblary'message2(); ← Perl4 での呼び出し方
■Perlのオブジェクト指向
Perlのオブジェクト指向
http://www.pure.co.jp/~learner/program/Perl_oo.html
C++のバイブル「猫でも〜」並に使えそうなページ
おきらくPerlプログラミング入門
http://www.geocities.co.jp/SiliconValley?-Oakland/1680/xperl/perl17.html
「お気楽 Prolog プログラミング入門」のM.Hiroiさんのサイトです。
■Perlの継承はメソッドしか継承しない
perlobjに書いてあります。
--
Perl のクラスは、メソッドの継承だけを行ないます。 データの
継承は、クラス自身に任されます。 全般的にこのことは、Perl
では問題とはなりません。 多くのクラスは、自分のオブジェクト
の属性を、名無しのハッシュを使ってモデル化するからです。 そ
のハッシュは、そのオブジェクトと何らかの関係を持とうとする、
さまざまなクラスによって切り分けられるために、自分自身の小規
模な名前空間として働きます。
--
まあ、なんか気持ち悪いけど気にしたら負けなので気にしない。
■perlのリファレンスという概念
http://www.rfs.jp/sitebuilder/perl/02/10.html
\変数 とすると、その変数のリファレンスになる。
C言語で言うポインタに当たる。
$ref1 = \$X #スカラー変数Xのリファレンス
$ref2 = \@Y #配列変数Yのリファレンス
$ref3 = \%Z #ハッシュ変数Zのリファレンス
無名データへのリファレンスというのも作れる。
$ref2 = [ aaa, bbb, ccc ]; #無名配列へのリファレンス
$ref3 = { key1 => 123, key2 => 'val2' }; #無名ハッシュへのリファレンス
XML-RPCの関数は複数の値を返せない。
このため、配列やハッシュへのリファレンスを返すとPerlで扱える。
■Perlの=>演算子
http://www.kt.rim.or.jp/~kbk/perl5.005/perldata.html
--
key/value のペアの間に => 演算子を使うと読みやすくなりま す。=> 演算子は実質、見た目に判別しやすいカンマ演算子でありますが、その左側にあるオペランドが正当な識別子であるような barewordであるときに、それを文字列として解釈するようになっています。これは、ハッシュの初期化を格好よいものにします:
%map = (
red => 0x00f,
blue => 0x0f0,
green => 0xf00,
);
あるいは、レコードとして使うハッシュリファレンスを初期化するために使います:
$rec = {
witch => 'Mable the Merciless',
cat => 'Fluffy the Ferocious',
date => '10/31/1776',
};
複雑な関数のために call-by-named-parameter を使うためにも使えま す:
$field = $query->radio_group(
name => 'group_name',
values => ['eenie','meenie','minie'],
default => 'meenie',
linebreak => 'true',
labels => \%labels
);
--
関数の引数をハッシュにして、第○○引数という使い方じゃなくて
キーが○○の引数という方法で使う。
sub func { my %hash = @_ ; my $val1 = $hash{key1}; ...
といった感じ。
可変引数の関数が簡単に作れそうで良いね。
文法的には、=>はあくまでキー名と値を繋ぐコンマの代わり
(+キー名の文字列を''で囲む必要がない)。
■Perlのsort関数
http://flex.ee.uec.ac.jp/texi/perl/perl_54.html
■HTTP::Cookies の解説
http://member.nifty.ne.jp/hippo2000/perltips/HTTP/Cookies.html
■LWP::UserAgent? の解説
http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FLWP
■HTTP::Request::Common の解説
http://member.nifty.ne.jp/hippo2000/perltips/HTTP/Request/Common.html
■POSTとGETを同時に受け取る方法
リクエストメソッドは同時にひとつしか選べないので、正確には
「POSTメソッドでクエリ付きのURLがリクエストされた時に
URL中のクエリとリクエストボディの両方を受け取る方法」
となる。
POSTとGETで同時にデータを受信したい
http://sb.xrea.com/showthread.php?t=7038