yamane wrote 目次の並びは 独習 Perl に準ずる mnyu wrote 

yamane wrote 基本 用法



yamane wrote 演算子
( + - * / % ** .) (= += -= *= %= /= **= .=) (++ -- )
(== != < <= > >= eq ne lt le gt ge cmp =~ !~ ! <=> )
(& | ^ &= |= ^= && || )



yamane wrote 制御 
(if else elsif unless while do != until next last exit ? )
html  自動生成





yamane wrote 配 列 ハッシュ 
(qw push pop shift unshift foreach )



yamane wrote 正規表現
($& $' $` )





yamane wrote 関数




yamane wrote package





yamane wrote モジュール




yamane wrote ファイル ディレクトリ




yamane wrote ネットワーク

--------------------------------------------------------------------------
--------------------------------------------------------------------------




mnyu wrote 基本 用法
#!/usr/bin/perl
#文章を単語単位に逆に並べる クック p15
$a= 'I said "I am here"';
@allwords = split(" ", $a); # ""の間にスペース無しでは文字単位で逆になる
$revwords = join(" ",reverse @allwords);
print $revwords, "\n";
#####################################################################
#!/usr/bin/perl # うえは 下のようにも書ける 同じだ
#文章を単語単位に逆に並べる クック p15
$a= 'I said "I am here"';
$revwords = join(" ",reverse split(" " , $a));
print $revwords, "\n"; 

#####################################################################
#!/usr/bin/perl
#ヒアドキュメントの使いかた クック p24# ~ s/$/tbz\n/g 
($a = <<"HERE_TARGET") =~ s/tbz/ q/g ;
I said "I am here"tbz
myname is kaz
thanks.tbz
HERE_TARGET
print "$a\n";




mnyu wrote 演算子

mnyu wrote 制御
 

#######################################################################

ファイルの奇数行だけ 番号付で取る
#!/usr/bin/perl
open (F, "5.0file"); ##パッケージ リストをオープン /(\S*)$/;
while (@a=<F>) {
for ($i=0 ; $i< @a ; $i++ ) { 
chomp (@a);
$j=$i + 1 ;
$k = 2*$i + 1;
$foo = @a[$k-1];
if ($foo == 0) {
exit ; 
}
print "$k$foo\n"; #@a ではない 注
close (F); 
}
}


#######################################################################
#ファイル中にある文字列 (yama) があるとループを抜ける 2/26 2003
#!/usr/bin/perl
open (F, "file"); ##パッケージ リストをオープン
while (@a=<F>) {
for ($i=0 ; $i< @a ; $i++ ) {
chomp (@a); #ないと空行ができる
$j = $a[$i]; ## $a[$2] は3番目の要素
if ($j =~ /yama/) {
exit ; # last でもいい
}
print"$j\n"; 
close (F); 
}
}
#######################################################################
#行頭に3 があればループを抜け処理を終る
#!/usr/bin/perl # #
open (F, "FR");
while (@a=<F>) {
chomp (@a);
for ($i=0 ; $i< @a ; $i++ ) { 
print "2番目まで$foo\n"; 
$foo = @a[$i];
if ($foo =~ /^3/) {
print "3番目 $foo\n";
exit ; 

}

}
close (F); 
#######################################################################
ループの先頭に戻る
 nextを使うとループの先頭に処理を戻すことができます。

while ($line = <>) {
next if ($line =~ /^\n/);
next if ($line =~ /^#/);
print $line;
}

#######################################################################
ループから抜ける
 lastを使うとループから抜けることができます。

while ($line = <>) {
last if ($line =~ /^\n/);
print $line;
}

#######################################################################
多重ループから抜ける
 last LABELを使うと多重ループから抜けることができます。

LOOP: foreach my $i (1..10) {
foreach my $j (1..10) {
print "($i $j)\n";
last LOOP if ($j == 5);
}
}
#######################################################################
#####################################################################
cat -n 5.0file と同じように 番号を付ける
#!/usr/bin/perl
open (F, "5.0file"); ##パッケージ リストをオープン /(\S*)$/
while (@a=<F>) {
for ($i=0 ; $i< @a ; $i++ ) { 
chomp (@a);
$j=$i + 1 ;
print "$j$a[$i]\n"; #@a ではない 注

close (F); 
}
}

####################################################################
ファイル名一括変換 pk は ls > pk でとっておく その後 このhenkan.pl に
chmod +x henkan.pl  してから  
henkan.pl > out としてとる


#!/usr/bin/perl
open (F, "pk"); ##パッケージ リストをオープン /(\S*)$/
while (@a=<F>) {
for ($i=0 ; $i< @a ; $i++ ) {
chomp (@a);
$j=$i + 1 ;
print "mv $a[$i] oomuta$j.jpg\n"; #@a ではない 注

#print "$j$a[$i]\n"; #@a ではない 注

close (F);
}
}




#####################################################################
#!/usr/bin/perl # FILEに番号を付けるとともに 行頭の文字を 抜き取る 2/27 2003

open (F, "FILE");
while (@a=<F>) {
for ($i=0 ; $i< @a ; $i++ ) { 
@u = "$i$a[$i]";
foreach $v ( @u ) { 
$v =~ /^(\S*)(.*)(20.*$)/;
print "$1\n";
}

}
close (F);
#####################################################################



#####################################################################
#      html ファイルの自動生成
#!/usr/bin/perl #
################ $a はout.htmlの文頭に挿入 する部分   ####
$a = <<EOT
<!DOCTYPE HTML PUBLIC "HTML 3.2">
<html>
<head>
<title></title>
</head>
<body bgcolor="#9dffff" text="#0000a0">
EOT
;
################ $b はout.htmlの文末に挿入 する部分   ####
$b = <<ABC
</body>
</html>
ABCtm
;

open (F, "file");
open (out , ">> file.html");
while (@a=<F>) {
print out "<$a\n";      #$a,$b の挿入場所に注意
 
for ($i=0 ; $i< @a ; $i++ ) {
@u = "$a[$i]";
foreach $v ( @u ) {

 
$v =~   s/$/<BR>/g ;
print out "$v\n";
print "$v\n";
}
}
}
print out "$b\n";       #$a,$b の挿入場所に注意
close (F);
#####################################################################
 
 
 




mnyu wrote 配 列 ハッシュ

配列のN番目に入った要素を printする (2003 2/26 朝から1日じゅうかかった)
#!/usr/bin/perl
open (F, "pkg.file"); ##パッケージ リストをオープン
while (@a=<F>) {
for ($i=0 ; $i< @a ; $i++ ) { 
chomp (@a);
$s = $i*2 + 1 ; #偶数行抜き取りは $s = $i*2 ;
$d = $i*2 ;
print "$a[$d]\t\t$a[$s]\n"; #@a ではない 注

close (F); 
}
}
#####################################################################
配列値の検索
 配列の中から特定のデータを取得したいというのは良くあることです。このときにループを使って一つ一つの要素を見て行けば目的の値を取得することができ ますが、grepを使用することにより簡単に済ますことができます。例えば、

@a = ('a', 'aa', 'ab', 'ca', 'daef', 'g', 'h');

の時に

@b = grep(/a/, @a);

とやると、'a'が含まれるもの('a', 'aa', 'ab', 'ca', 'daef')が@bに格納されますし、

@b = grep(/^a/, @a);

で'a'から始まるもの('a', 'aa', 'ab')が取れます。
#######################################################################
配列値のソート
 ずばりsortを使用すると簡単です。例えば@hogeの内容を昇順に並べ換えたい場合は、

@hoge = sort @hoge;

あるいは

@hoge = sort {$a cmp $b} @hoge;

でできます。逆順に並べ換えたい場合は、

@hoge = sort {$b cmp $a} @hoge;

または

@hoge = reverse sort @hoge;

とします。
 上記の場合は@hogeの要素を文字列としてみて並べ換えをしますが、数値としてみて並べ換えを行う場合には

@hoge = sort {$a <=> $b} @hoge;

#######################################################################
配列の要素数
 取得の方法は2種類あります。$#配列名とする方法と、配列をスカラーコンテキストで評価する方法です。

@hoge = (100, 110, 120);

# 最後の添字を取得(この場合は2。配列が空の場合は-1)
$num = $#hoge;

# 要素数を取得(この場合は3。配列が空の場合は0)
$num = @hoge;


#######################################################################
配列に値を追加
 先頭に値を追加するにはunshift、末尾に値を追加するにはpush、任意の場所の値を追加するにはspliceを使用します。

@hoge = (1, 2, 3, 4, 5, 6);

# 先頭に値を追加
unshift @hoge, 0; # @hoge = (0, 1, 2, 3, 4, 5, 6)

# 末尾に値を追加
push @hoge, 7; # @hoge = (0, 1, 2, 3, 4, 5, 6, 7)

# 2,3番目に値を追加
splice @hoge, 1, 0, ('a', 'b'); # @hoge = (0, a, b, 1, 2, 3, 4, 5, 6, 7)

#######################################################################
配列から値を削除
 先頭の値を削除するにはshift、末尾の値を削除するにはpop、任意の場所の値を削除するにはspliceを使用します。

@hoge = (1, 2, 3, 4, 5, 6);

# 先頭の値を削除
shift @hoge; # @hoge = (2, 3, 4, 5, 6)

# 末尾の値を削除
pop @hoge; # @hoge = (2, 3, 4, 5)

# 2,3番目の値を削除
splice @hoge, 1, 2; # @hoge = (2, 5);
#####################################################################

配列のコピー
 =でコピーできます。

@hoge = (1, 2, 3, 4, 5, 6);
@fuga = @hoge;
#######################################################################
配列の連結
 元の配列に連結する場合はpushまたはunshift、新しい配列を作る場合は代入でできます。

@hoge = (1, 2);
@fuga = ('a', 'b');
@piyo = ('A', 'B');
# 後ろに追加
push @fuga, @hoge; # @fuga = (a, b, 1, 2);
# 先頭に挿入
unshift @piyo, @hoge; # @piyo = (1, 2, A, B);

@foo = (1, 2);
@bar = ('a', 'b');
# 連結して新しい変数に代入
@baz = (@foo, @bar); # @baz = (1, 2, a, b);

#######################################################################
部分配列の取得
 元の配列からある特定部分の値だけを取得することができます。

@hoge = (1, 2, 3, 4, 5, 6);

# 2, 3番目の値 @foo = (2, 3)
@foo = @hoge[1, 2];

# 1〜3番目の値 @bar = (1, 2, 3)
@bar = @hoge[0..2];

# 1〜3番目と6番目の値 @baz = (1, 2, 3, 6)
@baz = @hoge[0..2, 5];

#######################################################################
ハッシュのマージ
 いくつかのハッシュをひとつにまとめたい場合は以下のようにします。

# %aと%bをまとめて%cにする
%c = (%a, %b);

また、ハッシュに値を追加したい場合は、

# %aに%bを追加する
%a = (%a, %b);

です。
#######################################################################
ハッシュの要素数
 keysで分かります。

%hoge = (a => 100, b => 200, c => 300);
$num = keys %hoge;

#######################################################################
ハッシュのコピー
 =でコピーできます。

%hoge = %fuga;


#####################################################################




#####################################################################


mnyu wrote 正規表現

. 改行文字を除く任意の1文字 
[a-z0-9] [ ]の中の任意の1文字(小文字大文字は別として扱う) 
[^a-z0-9] [ ]の中にない任意の1文字 
\w アルファベット、数字又は下線 
\W アルファベット、数字、下線以外 
\d 数字 
\D 数字以外[^0-9]と同じ 
\s 空白文字(スペース、タブ、改行) 
\S 空白文字以外 
\n 改行 
\r リターン(復帰) 
\t タブ 
\d バックスペース 12 8進数の値 
\x811 16進数の値 
\cx 制御文字

数量子 
? 直前の文字が0個または1個 
* 直前の文字が0個以上 
+ 直前の文字が1個以上 
{a} 直前の文字がa個 
{a,} 直前の文字がa個以上 
{a,b} 直前の文字がa個以上b個以下 
?? 直前の文字が0個または1個 注1 
*? 直前の文字が0個以上 注1 
+? 直前の文字が1個以上 注1 
{a}? 直前の文字がa個 注1 
{a,}? 直前の文字がa個以上 注1 
{a,b}? 直前の文字がa個以上b個以下 注1


その他 
\ 次のメタ文字をクォートする ( \. → "."自信を表わす) 
() グループ化

特殊変数 $1.$2, \1.\2 グループ化項目を後で参照 
$& 文字列全体 
$` 文字列の前にある全ての文字列 
$' 文字列の後ろにある全ての文字列


#######################################################################
ファイル内文字列の置換
 -i -p -eオプションを使用します。

# カレントディレクトリにある拡張子.htmlというファイル中のfromをformに置換する
# UNIX系
perl -i -p -e 's/from/form/g;' *.html

 オプションはそれぞれ以下の働きをします。
-i ファイルを修正する。拡張子の指定があれば、その拡張子でバックアップを取る。
-p 1行ずつ処理し、結果を出力する。
-e コマンドライン上でスクリプトを指定する。

 -pによってファイルが処理され(処理内容は-eで指定)、出力されます。そしてその結果が-iによって元のファイルに出力されます。
#######################################################################


#######################################################################


#######################################################################



mnyu wrote 関数




mnyu wrote package

#!/usr/bin/perl # package の使い方
package mnyu ;
$a = 'file1';
$s = -s $a;# file1のサイズ取得

package kazu ; 
$a = 'file2';
$s = -s $a;# file2のサイズ取得

package main ;
print " $mnyu::s $kazu::s \n"; 





mnyu wrote モジュール ライブラリ

#######################################################################

ライブラリの場所
 perldocコマンドの-lオプションで分かります。
 例えば、File::Pathライブラリの場所が知りたいときには、

perldoc -l File::Path

と実行すると

/usr/lib/perl5/5.6.1/File/Path.pm

というように表示されます。


#######################################################################
#######################################################################
定数を使う
 constantモジュールを使います。

use constant AAA => 'aaa';
use constant BBB => 100;
use constant CCC => 24 * 60 * 60;
use constant YYY => [100, 200, 300];
use constant ZZZ => {a => 'A', b => 'B'};

print AAA, "\n";
print BBB * 10, "\n";
print CCC, "\n";
print YYY->[1], "\n";
print ZZZ->{a}, "\n";

というように使います。
#######################################################################
変数の内容を出力
 Data::Dumperモジュールを使います。複雑なデータ構造でも表示できるのでデバッグに便利です。

# 変数の内容を出力する
use Data::Dumper;

$foo = {
key1 => 'val1',
key2 => [1, 2, 3],
key3 => {a => 'A', b => 'B'},
};

print Dumper $foo;

#######################################################################

#######################################################################

#######################################################################


mnyu wrote ファイル ディレクトリ



#####################################################################
### File TEST # fileがバイナリならOKと書く
#!/usr/bin/perl # 
$a = 'File';
$s = -B $a;
if ($s == 1) {
print " OK \n"; 
}

#####################################################################

Fileサイズ

#!/usr/bin/perl # 
$a = 'File';
$size = -s $a;
print "$aのサイズは$sizeです。\n";
#####################################################################
2つのfileを比較して何かする
#!/usr/bin/perl # 
$a = 'FR';
$s = -s $a;
$x = 'FRR';
$y = -s $x;
if ($s -$y > 100) {
print " $a is over 100 bigger \n"; 
}
if ($y -$s> 100) {
print " $x is over 100 bigger \n"; 

print "FR is $s FRR is $y \n";

##################################################################### 
#!/usr/bin/perl # 
$a = 'FR';
$s = -s $a;
$x = 'FRR';
$y = -s $x;
print "FR$s FRR$y\n";
if ($s -$y > 100 | $y -$s> 100) {
print "差が100以上あります\n";
}
#####################################################################
#######################################################################
ファイル存在確認
 -eを使います。

$a = 'hoge.txt';
if (-e $a) {
print "$aが存在します。\n";
} else {
print "$aが存在しません。\n";
}

#######################################################################
ファイルサイズ取得
 -sを使います。

$a = 'hoge.txt';
$size = -s $a;
print "$aのサイズは$sizeです。\n";

#######################################################################
ファイル名変更
 renameを使います。

$foo = 'hoge.txt';
$bar = 'hoge.bak';

print "[$foo]を[$bar]に変更します。\n";
rename $foo, $bar;

#######################################################################
ファイルの削除
 unlinkでできます。

if (unlink '/home/suzuki/dat/foo.conf') {
print "Delete.\n"
} else {
print "Error.\n"
}

#######################################################################
ファイルのコピー
 File::Copyモジュールのcopyを使用します。
 第1引数にコピー元、第2引数にコピー先を指定します。第3引数でコピーに使用するバッファサイズを指定することもできます。
 コピーに成功すると1、失敗すると0を返し、失敗時のエラーは$!にセットされます。

# hoge.txt を fuga.txt にコピーする
use File::Copy;

copy "hoge.txt", "fuga.txt" or die $!;

# ファイルハンドルから piyo.txt にコピーする
use File::Copy;
use FileHandle;

$fh = FileHandle->new("hoge.txt", "r");
if ($fh){
binmode $fh;
copy $fh, "piyo.txt" or die $!;
$fh->close;
}

# hoge.txt を 標準出力にコピーする
use File::Copy;

copy "hoge.txt", \*STDOUT or die $!;

#######################################################################
ファイルの移動
 File::Copyモジュールのmoveを使います。
 第1引数に移動元、第2引数に移動先を指定します。
 移動に成功すると1、失敗すると0を返し、失敗時のエラーは$!にセットされます。
 rename関数でもファイルの移動ができますが、別のデバイスに移動する場合にInvalid cross-device linkというエラーになるので、moveを使う方が良いです。

use File::Copy;

$foo = '/home/yokota/hoge.txt';
$bar = '/tmp/hoge.txt';

move $foo, $bar or die $!;

#######################################################################
ファイルパーミッションの取得
 statを使用します。3番目の返り値を8進数に変換したものの下3桁がパーミッションになっています。

@st = stat 'foo.txt';
$p = substr((sprintf "%03o", $st[2]), -3);
print $p, "\n";


#######################################################################
 chmodを使用します。第1パラメータにパーミッションを指定します。
ファイルパーミッションの設定
$ret = chmod 0666, 'hoge.log';


#######################################################################
ファイル名と行番号
 __FILE__と__LINE__で分かります。

printf "file[%s] line[%d]\n", __FILE__, __LINE__;


#######################################################################
ファイル名の取得
 File::Basenameモジュールのbasenameを使います。
 第1引数にパス名を指定するとファイル名部分のみを返します。第2引数以降に拡張子を指定すると、ファイル名からさらに拡張子をのぞいた部分を返しま す。

use File::Basename;

$filename = '/home/user1/test.txt';

$name = basename($filename); # $name = 'test.txt'

@extlist = ('.txt');
$name2 = basename($filename, @extlist); # $name2 = 'test'
#####################################################################
#######################################################################
ディレクトリ存在確認
 -dを使います。

$a = 'hoge';
if (-d $a) {
print "ディレクトリ$aが存在します。\n";
} else {
print "ディレクトリ$aが存在しません。\n";
}

#######################################################################
ディレクトリの作成
 mkdirでできます。

if (mkdir 'dat', 0777) {
print "Make.\n";
} else {
print "Error.\n";
}


#######################################################################
ディレクトリの取得
 File::Basenameモジュールのdirnameを使います。
 第1引数にパス名を指定するとファイル名部分のみを返します。

use File::Basename;

$filename = '/home/user1/test.txt';

$name = dirname($filename); # $name = '/home/user1'


#######################################################################
ディレクトリの削除
 rmdirでできます。

if (rmdir 'dat') {
print "Delete.\n";
} else {
print "Error.\n";
}

#######################################################################
カレントディレクトリの変更
 chdirでできます。

chdir '/home/user1' or die $!;

#######################################################################
 Cwdのgetcwdを使います。

use Cwd;
$wd = Cwd::getcwd();
#######################################################################

#####################################################################

mnyu wrote ネットワーク





mnyu wrote 未決 未決 未決 未決 未決 未決 未決 未決 未決
 


#####################################################################
# 類似ファイル諸とも取得するスプリクト
#!/usr/bin/perl
$ftp="wget ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.0-release/All/";
#$ftp="pkg_add ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.0-release/All/";
#$ftp="wget ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.0-release/All/";
#$ftp="pkg_add ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.0-release/All/";
# か 5.0Rか インストールか ファイル取得かで # を外す####

open (F, "5.0files"); ##パッケージ リストをオープン
while (<F>) {

s/^........................//g ;#例( 7757969 Jan 4 01:07 WordNet-1.7.1.tbz)先頭から24文字
# s/tgz/tgz \/f-server\/public\/FreeBSD4.4R\/easy-inst/g ; #続けて置換 できる 重要

open (out , ">> 1.sh");
print out "$ftp$_ #size$&\n"; #$_は先頭から24文字以後、$&は先頭のマッチ部分
print"$ftp$_ ##size$&\n\n"; 
}
close (F); 
#exec ("uniq pkgcopy.sh > pppkgcopy.sh" ) ;重複行の削除

考え方
7757969 Jan 4 01:07 WordNet-1.7.1.tbz のようになっているので
#####################################################################

#####################################################################
#!/usr/bin/perl
$str = 'aBCdefGHIJ';

# 下記のどちらでも $str を1,2,3,4文字に分割したものを
# @aaa に格納します
@aaa = unpack 'a1a2a3a4', $str; # unpack
#@aaa = $str =~ /(.)(..)(...)(....)/; # マッチ

foreach $val (@aaa) {
print "$val\n";
}
## 結果 #####
a
BC
def
GHIJ
#######################################################################
# 単純な連結
$foo = 'ABC';
$bar = 'DEF';
$baz = $foo . $bar; # $baz = 'ABCDEF' 
#######################################################################
# カンマを挟んで連結
@hoge = ('ABC', 'DEF', 'GHI');
$fuga = join ',', @hoge; # $fuga = 'ABC,DEF,GHI'
#######################################################################
# YYYY/MM/DD HH:MI:SS形式
$date = sprintf '%04d/%02d/%02d %02d:%02d:%02d',
$year, $mon, $day, $hour, $min, $sec;
#######################################################################
文字列長の取得
 lengthを使います。

$hoge = 'abcdefg';
$hoge_len = length $hoge;
print $hoge_len, "\n";
#######################################################################
 日本語を含む文字列の文字数を取得する場合には以下の関数を使います。

# EUC用文字数取得関数
sub length_euc {
my $str = shift;
my $cnt = 0;
while ($str =~ m/
[\x00-\x7F]|
[\x8E\xA1-\xFE][\xA1-\xFE]|
\x8F[\xA1-\xFE][\xA1-\xFE]
/gx
){
$cnt++;
}
return $cnt;
}
#######################################################################
# Shift JIS用文字数取得関数
sub length_sjis {
my $str = shift;
my $cnt = 0;
while( $str =~ m/
[\x00-\x7F\xA1-\xDF]|
[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]
/gx
) {
$cnt++;
}
return $cnt;
}
#######################################################################
現在の日時を求める
 localtimeという関数を使うと簡単に求めることができます。例えば、

@youbi = ('日', '月', '火', '水', '木', '金', '土');
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon += 1;
print "$year年$mon月$mday日($youbi[$wday]) $hour時$min分$sec秒\n";

とやると、

1999年3月22日(月) 23時37分19秒

#######################################################################
#######################################################################
【100個の変数を表示させる】

for ( 1 .. 100 ) {
print $a[$_] ;
}
#######################################################################

#######################################################################
パス名の分解
 File::Basenameモジュールのfileparseを使います。
 第1引数にパス名を指定するとファイル名、ディレクトリ名を返します。第2引数以降に拡張子を指定すると、ファイル名、ディレクトリ名、拡張子を返しま す。

use File::Basename;

$filename = '/home/user1/test.txt';

# $name = 'test.txt'; $dir = '/home/user1/'; $ext = '';
($name, $dir, $ext) = fileparse($filename);


@extlist = ('.txt');
# $name = 'test'; $dir = '/home/user1/'; $ext = '.txt';
($name, $dir, $ext) = fileparse($filename, @extlist);
#######################################################################

#######################################################################
前0をつける
 例えば月日を表すときに1月1日を01/01とするように数値データの場合、桁数が決まっていてその桁数に満たないときには前に0をつけて決まった桁数 に合わせるということが必要なことがあります。
 このような場合にはsprintfを使用すると簡単に実現できます。例えば、

$a = 3;
$b = sprintf("[%05d]", $a);
print $b;

とやると、

[00003]

と表示されます。また、単に出力の時だけ前に0をつけたい場合はprintfを使えばよいです。
#######################################################################


#######################################################################
べき乗の計算
 **で計算できます。
print 2**10, "\n";

#######################################################################
切り捨て
 intを使います。
 小数点以下を切り捨てる場合にはそのままintを使い、小数点以下n桁を残して切り捨てる場合には10のn乗をかけてからintを使い10のn乗で割り ます
#######################################################################
切り上げ
 +1してからintを使います。
 小数点以下を切り上げる場合にはそのままintを使い、小数点以下n桁を残して切り上げる場合には10のn乗をかけてからintを使い10のn乗で割り ます。
 対象が負数の場合にはいきなりintを使います
#######################################################################
環境変数の取得
 %ENVから取れます。

$home = $ENV{HOME};

すべての環境変数の一覧を見る場合、

foreach $key (sort keys %ENV) {
print "$key=[$ENV{$key}]\n";
}

のような感じで書きます。
#######################################################################
プロセスIDの取得
 特殊変数の$$がプロセスIDになります。

print $$, "\n";

でプロセスIDを表示します。 
#######################################################################
関数のヘルプを見る
 perldoc -fを使います。コマンドライン上で

perldoc -f split

とやると、split関数の使い方が表示されます
#######################################################################

#######################################################################
コマンドライン引数
 @ARGVです。コマンドライン引数の一覧を表示するには、

foreach $val (@ARGV) {
print "$val\n";
}

です。
#######################################################################
1秒未満のsleep
 秒単位のsleepであればsleepで良いですが、1秒未満のsleepをする場合にはselectを使います(使えない場合もあります)。

# 0.5秒sleepする
select undef, undef, undef, 0.5;

#######################################################################
改行コードを <BR> に変換する

s/\x0D\x0A|\x0D|\x0A/<BR>/g;

改行コードは Windows(DOS)では \x0D\x0A, Macでは \x0D, UNIX では \x0A なので, これらすべての改行コードに対応するには \x0D\x0A|\x0D|\x0A とする必要があります.このとき順番は \x0D\x0A を必ず最初にしなければなりません. このスクリプトは簡潔でわかりやすく書かれてはいますが, 実行速度は遅いです. s/\x0D\x0A|[\x0D\x0A]/<BR>/g; とするとほんの少し速くなりますが,ほとんどの場合次のように 3文でやった方が圧倒的に速いです.

s/\x0D\x0A/<BR>/g;
s/\x0D/<BR>/g;
s/\x0A/<BR>/g;

改行について詳しくは「改行コードを統一する」 を参照. 
#######################################################################
改行コードを削除する

tr/\x0D\x0A//d;

「改行コードを <BR> に変換する」と同じ手法で, s/\x0D\x0A|\x0D|\x0A//g; と書いても改行コードを削除することができます.また, <BR>に変換する場合と違って, \x0D,\x0A という 2つの文字を両方とも削除すればいいので, s/[\x0D\x0A]//g; と書いても同じことができます. しかし,このように文字単位で変換する場合は, tr/\x0D\x0A//d; と書いた方が s/\x0D\x0A|\x0D|\x0A//g; や s/[\x0D\x0A]//g; とするよりも実行速度が速いので, tr を使って改行コードを削除するようにするのがいいでしょう.

ここで注意が必要なのは,この方法で改行コードを削除すると, 文字列の中に含まれるすべての改行コードが 削除されるということです.1行入力された場合のように, 文字列の最後にだけ改行コードがあるとわかっている ときは, chomp を使います.ただし, chomp は Windows(DOS) や Mac,UNIX といった処理系に依存します. \x0D\x0A を UNIX の perl で chomp した場合は, \x0D が残ってしまいます. もし,複数の処理系の改行コードを想定しなければならない場合は,次のように して文字列の最後の改行を削除します.

s/\x0D?\x0A?$//;

#######################################################################

#######################################################################
ファイルからの読込み
* ファイルからの読込みは open で取得したファイルハンドルに対して関数や、通常の代入の様な方法で行います。

【 一行の読込み 】

$line = <FILEHANDLE> ;

《 説 》

FILEHANDLEに対応づけられたファイルの先頭から1行ずつデータを読み込んで行きます。デフォルトでは1行の区切りとして改行文字が用いられま す。

【 リストコンテキストによる一括読込み 】

@array = <FILEHANDLE> ;

《 説 》

リストコンテキストでデータを受け取るとFILEHANDLEに対応づけられたファイルの内容を一括して配列へ代入する事が出来ます、1行目が $array[0]に格納されています。

【 read 関数による読込み 】

read ( FILEHANDLE , スカラ変数 , 読み出すバイト長 ) ;

read(FILEHANDLE,$data,64);

《 説 》

ファイルの先頭から 64Byteのデータを取得します。
このread によるデータの読込みは CGI でデータの受け渡し方法が POST の時データを受け取る際に、標準入力から送信されたバイト数分データを読み込むのに使用します。
#######################################################################
■ファイルへの書込み

【 printを使用する出力 】

print FILEHANDLE 出力データ ;

《 説 》

ファイルへの出力は通常の print , printf の引数に open で取得したファイルハンドルを指定します、それ以外は通常の print文と変りありません。

【 syswriteを使用する出力 】

syswrite [ FILEHANDLE ] , [出力データ] , [出力バイト長];

《 説 》

システムコール read(2) を用いて、指定した ファイルハンドルから、変数へ、指定バイト分のデー出力込みを試みます。printと異なりデータのバッファリングを行わず実行時すぐにデータを出力しま す。
#######################################################################
whileとの併用

* 非省略形


while ( $line = <FILEHANDLE> ){
処理
}

#######################################################################
* 省略形


while (<FILEHANDLE> ){
処理
}
#######################################################################
foreachとの併用


@Array = <FILEHANDLE> ;
foreach $tmp ( @Array ) {
処理

#######################################################################

オープン時のエラートラップ

open ( FILEHANDLE , "< filename ") || die "ファイルを開けません :$!\n";
#######################################################################