2012/05/10

CPAN モジュールを追加する


Perlで小数点以下の数値の丸めこみをしようとしたら、PHPのround()のような関数が無いらしく…( ̄ω ̄)CPANのMath::Roundを使えば、同じことができるらしいのでインストールする。
とりあえずCPANのモジュール検索で「Math::Round」を検索してGET。(Math-Round-0.06.tar.gz)
[winの場合]

2010-12-07



解凍したDIR内に「Round.pm」があるので、それをperlのモジュールDIR(ワシのlocalだとC:\Perl\lib\)に入れるか、任意のDIR作成し、そこに入れたら、プログラム内でパスを通してやるかのどっちかでOK。
説明
sample.cgi
lib/
↑libディレクトリを作ってやって、そこに放り込む。
sample.cgiの中身はこんな感じ↓。
#!perl
use lib ("./","./lib");
use Round qw/nearest/;
[Linuxの場合]
tar.gzを鯖の適当な場所へUPして、解凍したら、解凍したDIRへ移動する。
※インストール作業は解凍先DIR内で行う。
READMEがあれば、読む。たいていインストール方法が書いてある。
Round.pmの場合はこんな感じで書いてあった↓
How to Install
==============
make
make test
make install
まったく、その通りにやれば勝手にpathの通ってる場所へインストールしてくれる。楽ちん。

.tar.gz 圧縮・解凍


# 圧縮
$ tar czvf package.tar.gz package-dir
# 解凍(元のパッケージ・ファイルを残す)
$ tar xzvf package.tar.gz
# .tar.gzファイルの中身を解凍せずに確認 コマンド:tar tzvf (.tar.gzファイル名)
$ tar tzvf 2006.tar.gz | head
#| head で、アーカイブ先頭から10行分だけ表示。

ログファイルを 検索して圧縮するsh

#!/bin/sh
LOGS=`ls .| grep -E "*.log$"`
for f in $LOGS
do
gzip $f
echo " -- END gzip! $f -- " #DEBUG
done

dateコマンドとunixtime


日付 から unixtime への変換方法
$ date +%s
1108218628
特定の日付を変換したいときは、'--date' オプションを利用する。
$ date +%s --date "2005-01-01 00:00"
1104505200
unixtime から 日付 への変換方法
awk使用。
$ echo 1104505200 | awk '{print strftime("%c",$1)}'
Sat Jan 1 00:00:00 2005
フォーマット
$ echo 1104505200 | awk '{print strftime("%Y-%m-%d %H:%M:%S",$1)}'
2005-01-01 00:00:00
参考)

↓こんなのもあった
date -d "@$(date +%s)"
参考)3分 Code Reading - date編

URLエンコード・デコード


2010-11-29



久々にperlをいじったけど、すっかりURLエンコードについて忘れてる…。
やり方もいろいろある用で…。うーん
とりあえず、「+」だけは 別で置換しろ・・・と。
sub url_encode($) {
    my $str = shift;
    $str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
    $str =~ tr/ /+/;
    return $str;
}
sub url_decode($) {
my $str = shift;
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
return $str;
}