2008年03月19日

perl の print_r っぽいやつ

use Data::Dump qw(dump);
print dump(\@shohin_data, \@sample_data);
exit;

投稿者 muuming : 13:29 | コメント (0)

2006年11月24日

特定タグのみ消去

# もにょもにょをそのまま

$strings=~s/()(.*?)(<¥/em>)/¥x01em¥x02¥2¥x01¥/em¥x02/g;

# もにょもにょをそのまま

$strings=~s/()(.*?)(<¥/a>)/¥x01a ¥2¥x02¥4¥x01¥/a¥x02/g;

#
をそのまま

$strings=~s/
/¥x01br¥x02/g;

# 指定しないタグはすべて表示

$strings=~s/

$strings=~s/>/>¥;/g;

# 元に戻す処理

$strings=~s/¥x01/

$strings=~s/¥x02/>/g;

投稿者 muuming : 17:44 | コメント (0)

2006年11月10日

使用可能なperlのモジュール

find `perl -e 'print "@INC"'` -name '*.pm' -print

投稿者 muuming : 16:22 | コメント (0)

2006年05月09日

文字の正規表現!パクリ!!

文字の正規表現
半角スペース

$space = '\x20';

全角スペース

$Zspace = '(?:\xA1\xA1)'; # EUC-JP
$Zspace_sjis = '(?:\x81\x40)'; # SJIS

全角数字 [0-9]

$Zdigit = '(?:\xA3[\xB0-\xB9])'; # EUC-JP
$Zdigit_sjis = '(?:\x82[\x4F-\x58])'; # SJIS

全角大文字 [A-Z]

$Zuletter = '(?:\xA3[\xC1-\xDA])'; # EUC-JP
$Zuletter_sjis = '(?:\x82[\x60-\x79])'; # SJIS

全角小文字 [a-z]

$Zlletter = '(?:\xA3[\xE1-\xFA])'; # EUC-JP
$Zlletter_sjis = '(?:\x82[\x81-\x9A])'; # SJIS

全角アルファベット [A-Za-z]

$Zalphabet = '(?:\xA3[\xC1-\xDA\xE1-\xFA])'; # EUC-JP
$Zalphabet_sjis = '(?:\x82[\x60-\x79\x81-\x9A])'; # SJIS

全角ひらがな [ぁ-ん]

$Zhiragana = '(?:\xA4[\xA1-\xF3])'; # EUC-JP
$Zhiragana_sjis = '(?:\x82[\x9F-\xF1])'; # SJIS

全角ひらがな(拡張) [ぁ-ん゛゜ゝゞ]

$ZhiraganaExt = '(?:\xA4[\xA1-\xF3]|\xA1[\xAB\xAC\xB5\xB6])'; # EUC-JP
$ZhiraganaExt_sjis = '(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55])'; # SJIS

全角カタカナ [ァ-ヶ]

$Zkatakana = '(?:\xA5[\xA1-\xF6])'; # EUC-JP
$Zkatakana_sjis = '(?:\x83[\x40-\x96])'; # SJIS

全角カタカナ(拡張) [ァ-ヶ・ーヽヾ]

$ZkatakanaExt = '(?:\xA5[\xA1-\xF6]|\xA1[\xA6\xBC\xB3\xB4])'; # EUC-JP
$ZkatakanaExt_sjis = '(?:\x83[\x40-\x96]|\x81[\x45\x5B\x52\x53])'; # SJIS

半角カタカナ [ヲ-゜]

$Hkatakana = '(?:\x8E[\xA6-\xDF])'; # EUC-JP
$Hkatakana_sjis = '[\xA6-\xDF]'; # SJIS

EUC-JP文字

$ascii = '[\x00-\x7F]'; # 1バイト EUC-JP文字
$twoBytes = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'; # 2バイト EUC-JP文字
$threeBytes = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3バイト EUC-JP文字
$character = "(?:$ascii|$twoBytes|$threeBytes)"; # EUC-JP文字

EUC-JP文字(機種依存文字・未定義領域・3バイト文字を含まない)

$character_strict = '(?:[\x00-\x7F]|' # ASCII
. '\x8E[\xA1-\xDF]|' # 半角カタカナ
. '[\xA1\xB0-\xCE\xD0-\xF3][\xA1-\xFE]|' # 1,16-46,48-83区
. '\xA2[\xA1-\xAE\xBA-\xC1\xCA-\xD0\xDC-\xEA\xF2-\xF9\xFE]|' # 2区
. '\xA3[\xB0-\xB9\xC1-\xDA\xE1-\xFA]|' # 3区
. '\xA4[\xA1-\xF3]|' # 4区
. '\xA5[\xA1-\xF6]|' # 5区
. '\xA6[\xA1-\xB8\xC1-\xD8]|' # 6区
. '\xA7[\xA1-\xC1\xD1-\xF1]|' # 7区
. '\xA8[\xA1-\xC0]|' # 8区
. '\xCF[\xA1-\xD3]|' # 47区
. '\xF4[\xA1-\xA6])'; # 84区

EUC-JP未定義文字(機種依存文字・3バイト文字を含む)

$character_undef = '(?:[\xA9-\xAF\xF5-\xFE][\xA1-\xFE]|' # 9-15,85-94区
. '\x8E[\xE0-\xFE]|' # 半角カタカナ
. '\xA2[\xAF-\xB9\xC2-\xC9\xD1-\xDB\xEB-\xF1\xFA-\xFD]|' # 2区
. '\xA3[\XA1-\xAF\xBA-\xC0\xDB-\xE0\xFB-\xFE]|' # 3区
. '\xA4[\xF4-\xFE]|' # 4区
. '\xA5[\xF7-\xFE]|' # 5区
. '\xA6[\xB9-\xC0\xD9-\xFE]|' # 6区
. '\xA7[\xC2-\xD0\xF2-\xFE]|' # 7区
. '\xA8[\xC1-\xFE]|' # 8区
. '\xCF[\xD4-\xFE]|' # 47区
. '\xF4[\xA7-\xFE]|' # 84区
. '\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3バイト文字

SJIS文字

$oneByte_sjis = '[\x00-\x7F\xA1-\xDF]'; # 1バイト SJIS文字
$twoBytes_sjis =
'(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; # 2バイト SJIS文字
$character_sjis = "(?:$oneByte_sjis|$twoBytes_sjis)"; # SJIS文字

SJIS文字(機種依存文字・未定義領域を含まない)

$character_sjis_strict = '(?:[\x00-\x7F\xA1-\xDF]|' # ASCII,半角カタカナ
. '[\x89-\x97\x99-\x9F\xE0-\xE9][\x40-\x7E\x80-\xFC]|' # 17-46,49-82区
. '\x81[\x40-\x7E\x80-\xAC\xB8-\xBF\xC8-\xCE\xDA-\xE8\xF0-\xF7\xFC]|' # 1,2区
. '\x82[\x4F-\x58\x60-\x79\x81-\x9A\x9F-\xF1]|' # 3,4区
. '\x83[\x40-\x7E\x80-\x96\x9F-\xB6\xBF-\xD6]|' # 5,6区
. '\x84[\x40-\x60\x70-\x7E\x80-\x91\x9F-\xBE]|' # 7,8区
. '\x88[\x9F-\xFC]|' # 15,16区
. '\x98[\x40-\x72\x9F-\xFC]|' # 47,48区
. '\xEA[\x40-\x7E\x80-\xA4])'; # 83,84区

SJIS未定義文字(機種依存文字を含む)

$character_sjis_undef =
'(?:[\x85-\x87\xEB-\xFC][\x40-\x7E\x80-\xFC]|' # 9-14,85-120区
. '\x81[\xAD-\xB7\xC0-\xC7\xCF-\xD9\xE9-\xEF\xF8-\xFB]|' # 1,2区
. '\x82[\x40-\x4E\x59-\x5F\x7A-\x7E\x80\x9B-\x9E\xF2-\xFC]|' # 3,4区
. '\x83[\x97-\x9E\xB7-\xBE\xD7-\xFC]|' # 5,6区
. '\x84[\x61-\x6F\x92-\x9E\xBF-\xFC]|' # 7,8区
. '\x88[\x40-\x7E\x80-\x9E]|' # 15,16区
. '\x98[\x73-\x7E\x80-\x9E]|' # 47,48区
. '\xEA[\xA5-\xFC])'; # 83,84区

投稿者 muuming : 16:16 | コメント (0)

2005年10月14日

リファレンス

strictなどでグローバル変数を使わない場合、サブルーチンやクラス側では
わざわざ値を渡せしてあげないと、受け渡しが出来ないらすいぃ。

それは、変数名がかぶったりする、危険性を回避するため かな?

でもいちいち引き渡したりするのが、面倒なときがある。
ので、 リファレンス変数でメモリの番地を引き渡す事ができる。
これは便利

C言語ではポインタっていうんだって

使い方 変数(スカラーでもハッシュでもひいてはリファレンス変数自体でもOK)の前に#をつけるだけ。

反対にリファレンス変数から値自体を取り出したりするときは $hogeをリファレンス変数とすると
スカラー変数のリファレンス変数なら $moto = $$hoge
ハッシュの場合 %moto = %$hoge
配列(リスト)の場合 @moto = @$hoge
で 元の値がとれまっする (デリファレンスという)

------------------------------------------------------------
$word = "A";
$ref_word = \$word;

print "リファレンス $ref_word
";

print "リファから参照 $$ref_word";
------------------------------------------------------------

投稿者 muuming : 17:52 | コメント (0)

変数に値代入時の変則的な?書き方

変数に条件毎に代入したいときは

$hoge = (($hoge eq "0") ? "shin": "gi" );

$hoge が 0の場合 shin を代入 偽の場合 gi を代入。

これは便利かもかも

投稿者 muuming : 17:45 | コメント (0)

2005年10月13日

sprintf

print sprintf( "%02d", $num );
こんな感じで形式を指定して表示ね

以下 形式
%c 文字 -Character
%d 10進数 -Deximal
%e 浮動少数(指数形式) -Exponential
%E 浮動少数(大文字のEを使った指数形式)
%f 浮動小数(固定小数点形式) -Floating
%g 浮動小数(浮動少数または指数形式のうち、少ないスペースで表現できる方)
%G %g の指数表示をEにしたもの
%ld 倍精度10進数 -Long
%lo 倍精度8進数
%lu 倍精度符号なし10進数
%lx 倍精度16進数
%n すでに出力した文字数を次の変数に格納
%o 8進数 -Octal
%p ポインタ (16進数での値のアドレス)
%s 文字列 -String
%u 符号なし10進数 -Unsigned
%x 符号なし16進数 -heXadecimal
%X %x と同じだが大文字を使う

投稿者 muuming : 17:49 | コメント (0)

配列の要素数

@hoge という配列があったら
$num=$#hoge

で配列の最後の数字がとれる

print $hoge[$#hoge];

これで配列の最後の要素が取れます。

投稿者 muuming : 17:06 | コメント (0)

$::LOG_DIR_PATH 変数?

変数のうち定義ファイルなどでPG内にて変更をしない定数をこんな形の変数に
入れているだけらしい。取り決めだって。

投稿者 muuming : 13:12 | コメント (0)

コンストラクタ

オブジェクト指向言語で作成したプログラムにおいて、データとそれを操作するための手続きを一体化した「オブジェクト」の生成時に呼び出される特殊な関数。オブジェクトが扱うデータの初期化などをここで行なう。

投稿者 muuming : 13:11 | コメント (0)

スーパークラスの継承

@SESSION::ISA = qw(LOG);

スーパークラスで定義したメソッドは、そのままサブクラスで使うことができるんだ。また、上書きしちゃうこともできる。

package ClassA; というのがあって
中にnew print_x というメソッドがあったとして

@ISA = qw ( ClassA );

クラスBを以下のように書けば敬称できるらしいが よーわからんの

# ClassB のコンストラクタ
sub new {
my $class = shift;

# ClassA のコンストラクタを呼び出す
my $self = new ClassA;
return bless $self;
}

投稿者 muuming : 13:05 | コメント (0)

shift 関数 unshift関数

リストの先頭要素を取り除いたり 先頭に入れたり

@menu = ("ラーメン","チャーハン","ぎょうざ")
shift @menu

これで@menu は@menu=("チャーハン","ぎょうざ")へ

$del = shift @menu
とすれば $del は ラーメン

unshift "コーラ" @menu で
@menu の先頭に コーラ が入るっと

投稿者 muuming : 10:54 | コメント (0)

環境変数

$ENV{'環境変数名'}; で環境変数がとれる

CONTENT_LENGTH 標準入力に格納された、POSTによるフォームデータのバイト数を格納している。
GATEWAY_INTERFACE Webサーバーが実行しているCGIのバージョンを格納している。大抵はCGI/1.1である。
HTTP_ACCEPT Webブラウザが直接扱えるContent-typeの一覧。
HTTP_COOKIE クッキー情報を格納している。
HTTP_HOST ドメイン名を格納している。
HTTP_REFERER CGIを起動したWebページのURLを格納している。
HTTP_USER_AGENT CGIのページを要求したWebブラウザの情報。WebブラウザとOSを特定できるような情報を格納している。
PATH パスを格納している。
QUERY_STRINGS GETにおけるWebサーバーに送られる情報が格納されている。URlにおける「?」の後ろの部分を格納している。
REMOTE_ADDR 訪問者のIPアドレスを格納している。
REMOTE_HOST 訪問者のホスト名を格納している。ただし、ホスト名が分からない場合は、IPアドレスを格納している。
REQUEST_METHOD スクリプトへのデータの受け渡し方法が格納されている。GETかPOST
SCRIPT_NAME CGIスクリプト名(URL)を格納している。
SERVER_ADMIN Webサーバーの管理者に関する情報を格納している。
SERVER_NAME CGIスクリプトを実行しているマシンのホスト名、またはIPアドレスを格納している。
SERVER_PROTOCOL Webサーバーが実行しているHTTPプロトコルのバージョンを格納している。大抵はHTTP/1.0である。
SERVER_PORT Webサーバーが使用しているTCP/IPのポート番号を格納している。大抵は80である。
SERVER_SOFTWARE CGIスクリプトを起動したWebサーバーの名称が格納されている。

$ENV{"HTTP_COOKIE"} で実際どんな値が取れるのか?

1、クッキーのセット
-------------------------------------------------------------------------------
print 'Set-Cookie: CookieTest1=%83e%83X%83g; expires=Tue, 01-May-2001 11:32:58 GMT;';
print 'Set-Cookie: CookieTest2=%83e%83X%83g; expires=Tue, 01-May-2001 11:32:58 GMT;'
print 'Content-Type: text/html',"\n";
print "\n";
print "以下、HTMLが続く\n";
----------------------------------------------------------------------

セットの形式は
Set-Cookie: クッキー名=クッキー値; expires=有効期限; domain=ドメイン名(サーバ名); path=パス; secure

んでもって $cookie=$ENV{"HTTP_COOKIE"}
の値は
CookieTest1=%83e%83X%83g%82P; CookieTest2=%83e%83X%83g%82Q

と;刻みのもの

値はURLエンコードされている 以下エンコードスクリプト
-----------------------------------------------------------------------------
$CookieValue = 'テスト';
$CookieValue =~ s/([^\w\=\& ])/'%' . unpack("H2", $1)/eg;
$CookieValue =~ tr/ /+/;
-----------------------------------------------------------------------

以下デコードスクリプト
-----------------------------------------------------------------------------
$CookieValue =~ s/\+/ /g;
$CookieValue =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
-------------------------------------------------------------------------------
まぁ これは◎覚えというかそういうもんだと思うしか・・・・

投稿者 muuming : 10:30 | コメント (0)

2005年10月12日

ローカル変数 my と local

ローカル変数 my と local があるがこの違い

表面上は使い方に違いはないが、処理のされ方に違いあり。
local ダイナミックスコープ変数 と呼びます。そして、local を使って変数を宣言することをダイナミックスコープ宣言と呼びます。

my を使って定義された変数は、レキシカルスコープ変数 と呼びます。そして、my を使って変数を宣言することをレキシカルスコープ宣言と呼びます。

local では、変数名は別々に保持されません。言い換えると、local は、グローバル変数に一時的な値を付けるといえます。Perl 内部では、それぞれの $var は、同じ変数として認識しており、コードの場所によって、値を付け替えるという作業をしています。そしてどこからその変数が呼び出されたかによって、適用する値が異なってくるのです。それがダイナミックスコープと呼ばれるゆえんです。

だそうです。
myはperl5から使えるそです。メモリの使い方かな?

投稿者 muuming : 19:39 | コメント (0)

use Jcode;

○ 構文

use Jcode;

Jcode::convert(\$str[, $outcode, $incode, $option]);
→ $str を $outcode で指定された文字コードに変換。
  旧来の方式だが jcode.pl を置き換える場合これが一番手っ取り早い。

$str = Jcode($str)->[sjis|euc|jis|utf8];
→ $str を指定された文字コードに変換(※コード名は必ず定数で指定)

$length = $Jcode->jlength();
→ 文字列の「日本語での」長さを返す。

以下、$j=Jcode->new($str[, $incode]); 後に使うもの:

$j->euc; ... EUCに変換
$j->jis; ... JISに変換
$j->sjis; ... SJISに変換
$j->ucs2; ... UCS2に変換
$j->utf8; ... UTF8に変換
$j->h2z([$keep_dakuten]); ... 半角カナを全角カナに直す
(※$keep_dakuten を立てると濁点が単一文字として残される(例)ガ→カ゛)
$j->tr($from, $to); ... 日本語(EUC)を含む文字の置換。$j->nmatch でマッチ件数を取り出せる。
$j->set($str[, $incode]) ... 文字列を$strに変更

はい全部パクッてます。

投稿者 muuming : 19:03 | コメント (0)

use CGI;

フォームからのデータの受け渡し用の便利くんのようです。
-------------------------------------------------
use CGI;
my $query = CGI->new;
my $user = $query->param('user');
-------------------------------------------------

これで フォームの user というフィールドに入れられた値が $user に入るらしい。

便利ね

全てのパラメータ名を取得するには、param()を引数なしで呼びます。
----------------------------------------------------------------------------
use CGI;
my @params = $query->param();
foreach my $param (@params) {
print $param, "\t", $query->param($param), "\n";
}
-----------------------------------------------------------------------------
うーん 便利


同様に、Cookieを取得するにはcookieというメソッドを使う

----------------------------------------------------------------------------
use CGI;
my $query = CGI->new;
my $session = $query->cookie('session_id');
----------------------------------------------------------------------------


CGIモジュールによるアップロード・ファイルの受け取りとかもできるそうな
----------------------------------------------------------------------------

use CGI;
my $buffer;
my $query = CGI->new;
my $file = $query->param('file');
my $file_name = ($file =~ /([^\\\/:]+)$/) ? $1 : 'uploadedd.bin';
open(OUT, ">$file_name") or die(qq(Can't open "$file_name".));
binmode OUT;
while (read($file, $buffer, 1024)) {
print OUT $buffer;
}
close OUT;
---------------------------------------------------------------------------------------


ちとよーわからんが まあとで・・・

投稿者 muuming : 18:36 | コメント (0)

use strict;

use strict;

これなんだ・・・・
strict  厳しい; 厳密な; 絶対的ならしい(英語は

strict - 安全ではないコンストラクトを制限する Perl プラグマ

どうやら変数の扱いを厳しくするものらしい。
、"subs"、"vars"、"refs" の 3つの制約
use strict 'refs';

use strict 'vars';

use strict 'subs';

内容はわかり次第かきまそ

#今のところの理解
変数定義しないと変数が使えない
ソフトリファレンスが使えない
  ソフトリファレンス $NAME="MURA"
            ${$NAME}="HOGE" → これは $MURA="HOGE" と同等
  これがソフトリファレンスらしいが、使うとメモリを食うので使わないほうが

投稿者 muuming : 18:26 | コメント (0)

KCatch.pm

perlは良くわからないので、他のサイトの転載ばかりになるでしょう!

まずは、KCatch.pm

KCatch.pm ファイルをウェブサーバの 動作するCGIと同じディレクトリ(または @INC なディレクトリ)にアップロード

動作させるCGIに一行加える
---------------------------------------------------------
#!/usr/bin/perl

use KCatch;  #加える
うんたらかんたら ・・・・
---------------------------------------------------------

これで、CGI スクリプト実行中のエラーだけでなく HTTPヘッダを出力する前に発生したエラーについても捕捉らしい。

便利いいのあるのね・・・・

んで、代表的な使い方

use KCatch qw( source );
開発時に便利ですが、一般公開後に何らかのエラーが発生した場合、一般ユーザにもコードが見えてしまう。公開前には外そうねとの事。

投稿者 muuming : 18:20 | コメント (0)