Perl

perl のファイルテスト演算子

-X FILEHANDLE -X EXPR -X A file test, where X is one of the letters listed below. This unary operator takes one argument, either a filename or a filehandle, and tests the associated file to see if something is true about it. If the argumen…

map と grep の違い ~ 一目瞭然編 ~

my $array_ref = [ ^---{id => 1, name => 'hoge', atk => 5, def => 8, hp => 10}, ^---{id => 2, name => 'fuga', atk => 6, def => 9, hp => 13}, ^---{id => 3, name => 'foo', atk => 7, def => 10, hp => 18}, ^---{id => 4, name => 'aaa', atk => 8,…

perl のファイルハンドルをつかって, ファイルに値を書き込む.

open FH, ">data.dat" or die; print FH $data; close FH; 注意点は2点 1. or を使う. (|| では優先度が高すぎるので, ">data.dat"が真なら(この場合必ず真)dieしない.) 2. ">data.dat" という形式. (">", "data.dat" の場合, or はどこと比較していいかわ…

Perl の SUPER 擬似クラス - メモ -

SUPER擬似クラスは, ベースクラスのことを指すのだそうです. use base qw (Hoge::Fuga::Base);~~ ry) ~~sub new { my ($class, $args) = @_; ~~ ry) ~~ my $obj = $class->SUPER::new(\%new_args); ~~ ry) ~~} などとするときのSUPER::new は Hoge::Fuga::Ba…

while とか for とか復習

while (条件式) 条件式が真なら常に実行. よって, while(1) while(@array) とかやると, ()内は常に真なので, 無限ループ. foreach () 配列全体やリスト処理をするためのもの. ()内から値のリストを受け取り, それぞれの値に対して一回ずつコードのブロックを…

否定演算子 ! のメモ

否定演算子 (!) は 0 とか undef が義, あとは真. defined は undef 以外は真.hash要素の存在確認は, exist exists $math_scores{$key} Ref. http://fleur.hio.jp/perldoc/mix/pod/perl5100delta.mix.html http://d.hatena.ne.jp/perlcodesample/20080213/12…

Perl の undef の取り扱いの注意 #1

use strict;$hoge = undef;if ($hoge == 0) { print "fuga\n"; }if ($hoge eq '') { print "foo\n"; } これ, use strict してても実行すると, fuga foo ってでます. $hoge が 数字とか文字とかと比較されると, Perl は勝手に気を使って, 数字っぽく ないしは…

とあるページングのロジック

FormValidator::Simple あたりで, { p => ['INT']} を受け取る. これはテンプレの href にページ数とともに送られてくる.こいつを受け取り, そのページ数にあったデータをテーブルから取ってくる.1ページあたりの表示件数は予め決めておき(今回は5件とする),…

Perlの三項演算子例

if (($inserted_hogehoge == 1) && $inserted_fugafuga == $NUMBER) { return 1; } else { return undef; } 三項演算子で書くと, return ($inserted_hogehoge == 1) && ($inserted_fugafuga == $NUMBER) ? 1 : undef;

複数のハッシュリファレンスを要素に持つ2つの配列を, それぞれ要素ごとにマージしたい時には, pairewiseが便利.

幾つかの要素を持つハッシュリファレンスを複数個要素に持つ配列リファレンス(ここでは $fuga1, $fuga2)を, 順番を崩さず各ハッシュリファレンス同士をマージしたい時, for文を使うとちょっと冗長になってしまいました. my $fuga_number = scalar(@$fuga1); …

配列(@list)の要素数だけforeach でまわしたいときは "$#list"

Perl の配列, my @list = 'a' .. 'z'; があったとき, foreach my $i (0 .. $#list) で配列の要素数分まわせます. scalar は配列の要素数を返すのですが, こちらは配列要素に振られた番号の最大値を返すんですかね. Ref. http://www12.ocn.ne.jp/~kumo/allcom…

Internal Server Error がでたら.

Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request.Please contact the server administrator, root@localdomain and inform them of the time the error occurred, and anythi…

ハッシュのリファレンス同士のマージ.

ハッシュのリファレンス同士をマージさせるには, CPAN モジュールの Hash::Merge を使うと便利です.ただし, Hash::Merge を使わなくても数行でいけます. ## $hashref1 に $hashref1 をマージする. my $hash1 = +{}; my $hash2 = +{};my @array = keys %$hash…

linux の文字コード変更方法. メモ.

文字コード確認. $ echo $LANG 一時的に文字コード変更. $ export LANG=ja_JP.UTF-8 デフォルト値を設定するときは, /etc/sysconfig/i18n を変更. 例:LANG環境変数のデフォ値を ja_JP.eucjp に設定する。 $ sudo vi /etc/sysconfig/i18n して LANG="ja_JP.e…

パッケージ名を取得する __PACKAGE__

自分用に引用メモ. __PACKAGE__ は自分の属するパッケージのパッケージ名を取得できます. 例えばこんな感じ. __PACKAGE__->dbh_keys(+{ master => $_::DB_HOGE_W, slave => $_::DB_HOGE_R, slave_for_backup => $_::DB_HOGE_BAK, }); Ref. http://d.hatena.n…

"called with 10 bind variables when 0 are needed at" に対する対処法 [エラー]

MSG:DBD::mysql::st execute failed: called with 10 bind variables when 0 are needed at .. →原因は "(ダブルクオーテーション) と '(シングルクォーテーション) の違いです. 例えば, $hoge を "(ダブルクオーテーション)でくくると, $hoge の中身が展開…

めちゃくちゃわかりやすいPerlのオブジェクト指向説明サイトから幾つか引用.

■警告表示 [例] use Carp qw(croak); ## 中略 ## croak('set_date の引数には、24以上は取れません。') if $time_difference >= 24; ■クラスなど クラス ... 専門領域. オブジェクト ... クラスの使いっ走り. パッケージ = クラス パッケージのサブルーチン …

cpanm を使いユーザ権限でlocalにモジュールをインストールしたいとき

デフォルトのモジュールのインストール先を指定 ~/extlib perlにライブラリの検索pathを指定 ~/extlib/lib/perl5等 追加したら $ source .bash_profile .bash_profile 等に以下を追加する. export PERL_CPANM_OPT="--local-lib=~/extlib" export PERL5LIB="$…

cpanminus を実行するとき, .bash_profileのパス変更を行ってると起こってしまうエラー.

Can't locate FormValidator/Simple.pm in @INC モジュールがデフォルトで設定してあるパスに配備されていないと起こるエラーのようです.sudo cpanm [module_name] でインストールしなおしたらいけました. Ref. http://www.devdaily.com/blog/post/perl/perl…

cpanminus のインストール

CPAN::shell は下記理由などにより新参者には色々と面倒なので、 cpanminusを導入します。 設定が面倒 動作が遅い(cpanmと比較して) 多くのメモリが必要(制約のきついレンタルサーバで使うのは無理) 依存するモジュールが多い 基本root権限が必要 ## install…

正規表現 /^(?:0|[1-9]\d*)$/ とかで使う ”?:” っていうのは

(?:) グループ化しない括弧を表します。正規表現で使う () は、 1.正規表現をグループ化し、後で\n, $n などで参照する 2.(A|B) などのようにまたはということを意味する ときなどに使われます。で、(?:) というのは後者で使うよ、ということを明示した…

モジュールに最初宣言する "package Hoge::Fuga"

忘備メモです。モジュールを書くときは最初に、 package Hoge::Fuga ですが、モジュール名の努力目標である、最初の文字は大文字ね、とはことなり、 "package" こいつは "Package" と大文字にしたのでは怒られます。 Can't locate object method "Package" v…

$ENV{'REMOTE_ADDR'} をすることでブラウザ側のIPアドレスを取得できますが。

これちょいと注意なのが、 ブラウザ上でしか動作確認できません。シェルで perl hoge.fcgi とかでチェックしてると、 Use of uninitialized value in concatenation (.) or string at hoge.fcgi line 31. とかってエラーがでつづけて少し時間を使ってしまっ…

use lib を使う.

use lib モジュールを使うことで、コンパイル時に、@INC に、検索パスを追加できます。 (ref. http://d.hatena.ne.jp/perlcodesample/20080428/1209380085) 自作したPerlモジュールを使用する際は、 検索パスをカレントディレクトリに通しておく。 そうすれ…

Perl error..

Mod/GenKey.pm did not return a true value at hogehoge.fcgi line 14. BEGIN failed--compilation aborted at hogehoge.fcgi line 14. なんか怒られてる。 →モジュールの最後には 1; などで閉めます。[http://itpro.nikkeibp.co.jp/article/COLUMN/2008052…

Perl で trim するときは

$string =~ s/^\s*(.*?)\s*$/$1/; これでいける。空白文字が0文字以上続いていて、任意の文字の0文字以上の連続ないしは0か1 (カッコ()で囲んだ部分にマッチした文字列は、置換文字列によって、特殊変数$1などとして参照される) で、その後また空白文字の0文…

Perl CGI で header について少しメモ

Perl で CGIプログラミングをするときは、perlのコードに print "Content-Type: text/html;charset=utf8\n\n" が必要なのは、以前メモった。 理由は、 サーバーは最初に、ブラウザに対して 「これからお送りしますのは、テキストで書かれたHTMLですよ〜」と…

リンクと共に値を渡すには [Perl, CGI]

画面遷移の際、値を渡します。 そのとき、form を使えば GET, POST などを指定して送れるのですが、 フォームに記入したり、とにかくワンアクション動作が入ってうるさいです。リンクに直接値を埋め込めば、GET指定になるという制約は発生しますが、 受け取…

Perl で CGI するとき。 表示に関するお約束。

print "Content-Type: text/html\n\n"; これを入れてあげないとブラウザ上で表示されない。 htmlとして認識させてあげる。

Perlのデバッガー

perl -d ./filename.pl "n"で一行ずつデバッグ、 "p"で関数の中まで入っていく。