Perl

メールアドレス判定 if( isMailAddress('m.ka-tsu-be@ichikoro.com') ){ print "メールアドレスです。\n"; } else{ print "メールアドレスではありません。\n"; } #--------------------------------------- #メールアドレスかチェックする #---------------…

絵文字にマッチさせる正規表現 #Shift_JIS体系におけるコード my $ascii = '[\x00-\x7f]'; #ASCIIと制御文字 my $two_bytes = '[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]'; #漢字 my $h_katakana = '[\xa0-\xdf]'; # 半角カタカナ #絵文字コード正規表現 my…

HTML::Templateモジュールを使ってCGIからテンプレートをセット際の、 TMPL_LOOPについて。TMPL_LOOPの基本的な使い方としては、 ・テンプレート記載 ・プログラム記載 my @value; my @val = ('ルフィ','ゾロ','ナミ','ウソップ','チョッパー','ロビン');…

GETでフォームからデータを送信する場合に、 URLエンコードという方法を使用します。文字列を '%a5%a8%a5%b9%a5%b1%a1%bc%a5%d7' こんな感じにエンコード(暗号化)します。 # $str を URLエンコードする $str =~ s/(\W)/'%' . unpack('H2', $1)/eg; すると、…

sprintf sprintfは文字のフォーマットに使います。例えば、 my $month = 1; my $s_month = sprintf("%02d", $month); こうすると、1が、01という表示に変わります。 %02d というところが、何桁でどういった表示にするかという形式の 部分ですね。 詳しくは、…

Jcodeをつかって、半角→全角にしたりするには、 Jcodeのtrを使います。 例: Jcode->new($str)->tr( 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨワヲン', '*')->euc(); カタカナを*に置換して、カタカナか、そうでない…

ランキング

前回の「sort」を発展させて、ランキングを作ってみましょう。 my %hash = (A => 2, B => 5, C => 3, D => 5); こんな配列があるとします。これをどういう風にしたいかというと、 1位 A 5点 2位 B 3点(同位) 2位 C 3点(同位) 4位 D 2点とこんな感じにし…

sort

ハッシュ値を並べ替えます。 検索システムなどの時に使ったりするんですかね? 昇順と降順は、$aと$bを入れ替えます。文字列を降順にする my @name_list = sort { $b cmp $a } @name; 数値を昇順にする my @num_list = sort { $a $b } @nums; ハッシュのキー…

重複データの個数を数える

@fruits('みかん','もも','もも','みかん','みかん');このような配列があります。 この配列で、「みかんが○個」「ももが○個」を調べたいとします。 foreach $name(@fruits) foreachで、配列の中身を一つずつ$nameに格納 { %hash; $hash{$name} => $hash{$nam…

cookie

クッキーでは、ブラウザに情報を送ってユーザーを判別することができます。 そのためには、HTTPヘッダを利用します。基本的には、クッキーを送るにはこのように書けばOKです。 print "Content-Type: text/html\n" print "Set-cookie: キー名=値; expires=有…

半角カナを全角カナに。

jcode.pl版 require '../jcode.pl'; &jcode::convert(\$value,'euc'); &jcode::h2z_euc(\$value); Jcode.pm版 use Jcode; &Jcode::convert(\$value,'euc'); require Jcode::H2Z; &Jcode::H2Z::h2z(\$value); モジュールで使うときの記述 Jcode->new($query->…

コンストラクタの継承

親 = Kaizoku.pm 子 = onepiece.cgiKaizoku.pm sub new { my $class = shift; my %args = @_; my $self = { tmpl_dir => $args{tmpl_dir}, tmpl_message => $args{tmpl_message} }; bless $self, $class; }これが、親のコンストラクタです。ここに、tmpl_for…

修正で戻った時、フォームにデータを残す

確認画面で、「修正」で前の画面に戻った時に、 データが残ってる場合と消えてしまう場合がありますよね。 データが残っているのはブラウザによって違うので、確実に残すためには プログラムできちんと指定してあげなければ。「戻る」ボタンで今まで使用して…

メールアドレスチェック

では、以上のことをふまえて、メールアドレスのチェックをしてみましょう。 今回は、携帯を含むことにします。携帯を含まない場合は、Perlメモ を使うとほぼ完璧なメールチェックができると思います。まず、携帯で許可されているアドレスはというと、 AU .(…

正規表現その3

$1 =~ /[^_0-9a-zA-Z\-\.]/ はて。なんですかね?これは。/パターン/これはOK。[^_0-9a-zA-Z\-\.]なんだこれ。。。 文字クラス マッチングの対象となる文字列中に、[ ] (ブラケット)で囲んだ文字の いずれかをマッチさせるため表現です。 ー(マイナス)は、…

正規表現2(例題)

これはどういう意味か。 if ($str =~ /^(.+)@(.+)$/) /パターン/という形なので、中のものにマッチするかどうか調べています。^(.+)なんですかね?これ。複数の文字にマッチ ^ 文字列(行)の最初にマッチする $ 文字列(行)の最後にマッチする *(アスタリスク…

正規表現その1

パターン結合演算子 スカラー変数(式)> =~ 演算子、置換演算子、変換演算子> 例: $input =~ s/&/&/g スカラー変数(式)とマッチ演算子、置換演算子、変換演算子を結合する。 左側はスカラー変数(式)であること。 マッチ演算子 /パターン/[修飾子]ある文字…

文字数制限

文字の長さを調べるlength関数を使います。 $comment #制限したい文字 if(length($value)>10) { push(@message, '5文字以内で入力してください。'); } length関数で出る文字数は半角文字のバイト数なので、 全角の場合は2倍した数字を入れなくてはいけません…

HTML::Templateモジュール

ちょっと思い出しメモ。 テンプレート作成 my $template = new HTML::Template(filename => 'kaizoku.html'); テンプレートに値をセット $template->param(prev => $perv); $teplate->param(next => $next); HTMLの作成 my $body = $template->output(); HTM…

モジュール小技

小技です。子モジュールで属性(変数)をセットする部分がありました。to_email => ['mail'], from_mail => ['ruffy@kaizoku.co.jp']ここです。これは、メールフォームの作成で、問い合わせ相手に自動返信するものなんですが、 ここに問い合わせてきた人のアド…

モジュールの利用

モジュールの作り方はわかりました。では、うまく利用してみましょう。 モジュールA → モジュールB → メイン処理 AはBの親で、Bはメイン処理の親という場合。 モジュールA コンストラクタ sub new { my $class = shift; my %op = @_; #ハッシュで受け渡しす…

KCatch

KCatchは、エラーが起きた時に、赤い文字で知らせてくれるもの。 use KCatch qw( execdata );__DATA__ #(デバッグツール) なるべく上の方に書きましょう。

use lib

use lib './cgi-lib'; モジュールファイルは全てcgi-libに入れます。 そして、どこにモジュールがあるか書いておきます。 それが、use lib。

オーバーライドの位置

!!オーバーライドは、処理の頭で行うこと。!! 個人的な覚え書き sub start { my $self = shift; my @message; $self->SUPER::start();#ここに書かないとエラーになるよ my $query = $self->getQuery();

 定数

Perlには定数という概念がありません。 なので、定数モジュールを使って定数を作ってみましょう。 use constant これがモジュールの名前。定数を宣言するのは、 use constant RUFFY => '麦わらのルフィ'; はい、これで完成。

オーバーライド

前回子モジュールを作りました。 そして、親モジュールの内容を書き換えようとしたわけですが。どうやって書き換えるかというと、 親と同じメソッド(サブルーチン)を子にも書いてやればよかったわけです。でも。 なんかピンときませんよね。 親のサブルーチ…

 メソッド変更

「オブジェクト指向」ってまだわかりません。とにかく、今やってることがオブジェクト指向に 近い事のようなので、あまり気にせずやっていこうと思います。モジュールの使い方はわかりました。で、それぞれのメソッド(サブルーチン)だけを取り出して、 使…

オブジェクト指向

いよいよオブジェクト指向に入ろうと思います。 ずっと「動けばいいじゃん」ってさけてきたんですが、いよいよ。。。早速、一番わからないオブジェクト指向に使う言葉をいくつか調べてみましょう。「Perlにおけるオブジェクト指向用語」 属性 オブジェクトを…

コンストラクタ

コンストラクタって難しいけど、ここに手を出さなきゃプログラムの意味がない! てなわけで、やってみることにしました!!! いよいよ近づいてきました、オブジェクト指向!!! 姿を現し始めましたよ。検索していると、あちこちから「オブジェクト」という…

モジュールを作ってみる

さて、さっそくですが、制作にとりかかりましょう。まず、現在使っているファイルは、 kaizoku.pl #メイン処理 robin.pl #パッケージやライブラリを書いてある ですね。 約束事ではパッケージ名とファイル名を揃えろ!と書いてあったので、 robin.plを「Mugi…