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;