条件式で || & && がおかしな動き> or and で統一しましょう & && で無事に動くことが多いようですが、 and が確実です
行末の改行文字削除 $_ = $str; chomp $_; s/\r//; $str = $_; # 行末の改行文字削除
C Language
array[] = { "a:", "b:", "c:", "d:", "e:"};
↓
perl
@array = ( "a:", "b:", "c:", "d:", "e:");
* ={} でなく =() であることに注意
* 取り出し例 : foreach $value ( @array){ ; }
* shift で取り出すこともできるが、配列要素が削除されることに注意
通常は、httpサーバの error_log 参照が必要だが( tail -f /var/log/httpd/error_log )
Carp モジュールを以下のように組み込めば、同内容がhttpクライアントに出力される
---
$DEBUG = 1;
if( $DEBUG != 0 ){ # ( $DEBUG = 1; でデバッグ出力を on/off できるように )
use CGI::Carp qw(fatalsToBrowser);
}
perl5未満非対応でよいなら、迷わず「 local を my に」置換するべき
変数のスコープ
local 使用時の注意点
一般の言語でいう内部変数とは異なることを知る必要がある。
perlで、同名であれば、local定義された変数も、同じ場所に格納される。
perlは実行時に変数スコープが変わる都度、その場所の内容を書き換える。
my $m; # Perl5 が使えるなら、何も考えず my を使うこと
local $l; # Perl4 の環境でも動作することが必要なら myは使えないので localを使う以外ない
$var = 1;
sub foo {
local $var = 2; # ダイナミックスコープ宣言( ダイナミックスコープ変数 )
}
sub boo {
print $var;# 2 を出力
}
print $var; # 1 を出力
sub内で宣言された local変数は、「そのsub内でのみ有効」なのではなく、あらゆる sub内で有効。
他の sub内で参照すると期待する広域変数でなく、どこか別の sub内にて代入された値が返される。
# 文字列をURLエンコードして返す
# 半角英数字及び、一部の記号( * - . @ ) はエンコード不要
# 半角スペース ' ' → '+'
sub url_encode{
my $str = shift;
# 1byteづつ、文字コードを2桁の16進数に変換し %xx 形式に '!' → %21
$str =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
return($str);
}
# URLエンコードされた文字列をデコードして返す
sub url_decode{
my $str = shift;
$str =~ tr/+/ /;
$str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#'+' を ' ' に %xx を該当の文字コードに戻す
return($str);
}
# ハッシュ変数の宣言
%member;
# 代入
$member{'Akai'} = 'red@domain.com';
$member{'Aoi'} = 'blue@domain.com';
%member = ('Amai', 'sweet@domain.com', 'Akudoi', 'bad@domain.com');
%member = (
"Osoi" => "slow@domain.com",
"Hayai" => "fast@domain.com",
);
# 要素数を取得
$n = keys( %hash );
# 内容をすべて出力
foreach $key ( keys %member ) {
print "$key : $member{$key}", "\n";
}
# 内容をすべて出力
while ( ($key, $value) = each(%member) ) {
print "key:$key, value:$value\n";
}
# 含まれる KEYをすべて取得
@key = keys( %hash );
# 含まれる値をすべて取得
@value = values( %hash );
( 宅内専用です... ) NET::POP3 MIME-Base64 MIME::Base64 MIME-tools MIME::Words MIME::Entity MIME::Parser MIME::ParserBase MIME::Head MIME::Body MailTools Mail::Internet
since 04/08/08(sun)