facebook twitter hatena line google mixi email

Perl/プログラミングメモ

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

表示のための宣言

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;