Perl/プログラミングメモ
提供: 初心者エンジニアの簡易メモ
目次
- 1 表示のための宣言
- 2 正規表現
- 3 foreachの使い方
- 4 アパッチログに保存
- 5 変数内のデータ表示
- 6 ループ変数のローカル化
- 7 ハッシュキーのループ
- 8 ログ吐き出し
- 9 Image-Magickバージョン確認
- 10 サムネイルの作り方
- 11 メール
- 12 日付
- 13 変数規制
- 14 md5
- 15 DIR一覧(昇順)
- 16 ハッシュデータ宣言
- 17 ハッシュからリファレンス、またその逆
- 18 arrからリファレンス、またその逆
- 19 リファレンスアクセス方法
- 20 タグ削除
- 21 エラーメッセージ取得
- 22 URLリダイレクト
- 23 配列の中にハッシュ
- 24 配列の件数
- 25 変数置換
表示のための宣言
print "Content-type: text/html\n\n";
正規表現
($cat =~ /^(?:99|98|97)$/) {
foreachの使い方
foreach $fname ('79','89','01','02','97','98','99','pl') {
アパッチログに保存
print stderr "aiueo";
変数内のデータ表示
use Data::Dumper; print Dumper(\@cat_arr);
ループ変数のローカル化
for (my $i
ハッシュキーのループ
foreach(keys %set) {print $_;}
でもOK
while (($key,$value)= each(%D)){
ログ吐き出し
open(OUT,">> /debuglog.txt"); print OUT time()." test"; print OUT "\n\n"; close(OUT);
Image-Magickバージョン確認
perl -MImage::Magick -e 'print Image::Magick->VERSION,"\n"'
サムネイルの作り方
use Image::Magick;
# Image::Magick のインスタンスを作る
my $img = Image::Magick->new;
# 加工処理するファイルを読み込む
$img->Read("./$filename");
# 元のサイズを得る
my ($src_w, $src_h) = $img->getimageattr('width', 'height');
# リサイズ後のサイズを計算 (幅200pxに縮小、高さは縦横比から計算する例)
my $new_w = 200;
my $new_h = int($src_h * $new_w / $src_w + 0.5);
# リサイズ
if (new_w < $src_w) {
$img->Resize(
width => $new_w,
height => $new_h,
blur => 0.7, # 縮小によるぼやけを補正 (blur < 1 でシャープ化)
);
}
# 出力
$img->Write("middle/$filename");
メール
sub _sendmail {
my ($from, $to, $bcc, $subj, $msg) = @_;
use Jcode;
my $SENDMAIL = '/usr/lib/sendmail -t -i';
open MAIL,"| $SENDMAIL";
print MAIL <<EOF;
From: ${\ (Jcode->new ($from)->h2z->mime_encode)}
To: ${\ (Jcode->new ($to)->h2z->mime_encode)}
Bcc: ${\ (Jcode->new ($bcc)->h2z->mime_encode)}
Subject: ${\ (Jcode->new ($subj)->h2z->mime_encode)}
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
${\ (Jcode->new ($msg)->h2z->jis)}
EOF
close MAIL;
}
日付
sub getyesterday {
my $diffoneday = 60 * 60 * 24; # 1日(前日日付算出など)
my $time = ($_[0]) ? $_[0] : time;
my @tmp = (localtime ($time - $diffoneday))[5,4,3,2,1];
$tmp[0] += 1900;
$tmp[1] ++;
return sprintf ("%04d/%02d/%02d %02d:%02d",@tmp);
}
変数規制
use strict;
md5
use Digest::MD5 qw(md5_hex); $data ="test"; $digest = md5_hex($data); print $digest;
DIR一覧(昇順)
opendir(DIR, "./") or die; @dir = sort readdir(DIR); closedir(DIR); use Data::Dumper; print Dumper(@dir);
ハッシュデータ宣言
%Hash = ( "one", 1 , "two", 2 ,"three", 3);
ハッシュからリファレンス、またその逆
my %hash;
$hash{a} = "aa";
$hash{b} = "bb";
$valhash = \%hash;
%hashhash = %$valhash;
use Data::Dumper; print Dumper(%hash); print Dumper($valhash); print Dumper(%hashhash);
arrからリファレンス、またその逆
&subarr(\@pdata);
sub subarr {
my ($data) = @_;
use Data::Dumper;
@p = @$data;
foreach (@p) {
print $_;
}
}
リファレンスアクセス方法
print $hoge->{piyo};
タグ削除
$test =~ s/<.*>//g;
エラーメッセージ取得
eval内でエラーが出ると$@で検出される
eval {
my $res = "err";
if ($res ne "err") {
# 正常
} else {
die;
}
aaa;
};
if ($@) {
print $@;
}
URLリダイレクト
print "Location: $url\n\n";
配列の中にハッシュ
print "Content-type: text/html\n\n";
my @cat_arr;
use Data::Dumper;
for(1..10){
my %cat_h;
$cat_h{name}="n$_";
$cat_h{color}="c$_";
push(@cat_arr,\%cat_h);
}
print Dumper(\@cat_arr);
foreach $i(@cat_arr){
print $i=>{name} . " " . $i=>{color} . "\n";
}
配列の件数
@array = ("hoge", "piyo");
print $#array
変数置換
#!/usr/bin/perl
print "Content-type: text/html\n\n";
my $str1 = "replace1";
$str2 = "replace2";
$buf = 'test1=$$str1:test2=$$str2:';
$buf =~ s/\$\$(\w+)/${$1}/g if ($buf =~ /\$\$(\w+)/);
print $buf;
my %str = (
str1 => "replace1",
str2 => "replace2",
);
$buf = 'test1=$$str1:test2=$$str2:';
$buf =~ s/\$\$(\w+)/$str{$1}/g;
print $buf;
