|
Perlメモ
■自動インストールの設定
1.ルートになる
2.yum install perl-CPAN
3.perl -MCPAN -e shell
4.ncftpgetは、/usr/bin/ncftpget
5.make install で、UNINST=1
6.Select your continent で、(2)Asia
7.Select your country で、(5)Japan
8.Select URL で、(2)Jaistと(8)CPAN
9.cpan> quite
■自動インストールの準備
1.perl -MCPAN -e shell
2.cpan> install Jcode
■文字列
・小文字変換
$d = lc($a);
・大文字変換
$e = uc($a);
・文字列バイト長
$g = length($a);
・文字列検索
$h = index($a, 'abc');
・書式フォーマット
$i = sprintf('書式フォーマット = %08d', $a);
・空白削除
$j = $a;
$j =~ s/ //g;
・文字置き換え
$k = $a;
$k =~ s/a/b/g;
・文字列分割
@l = split(/\,/, $a);
・整数化
$n = int($a);
・変数内の文字列を逆順にする
reverse($a);
・配列内の要素を逆順にする
reverse(@a);
・文字列マッチ(部分OR)
if(m/this is (apple|orange)/){
printf("$1\n");
}
■文字列チェック
・4桁の番号チェック
if($id =~ /[0-9]{4}/)
→/と/で全体を囲む
→文字列は[]で囲む
→{4}はマッチ数
・メールアドレスチェック例
if($mail =~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,3}/)
→"+"は1回以上にマッチ
→{2,3}は2回以上3回以下のマッチ
・文字列の分割
$value=100:200;
($a,$b)=split(/:/,$value);
$aには100,$bには200が代入される。
・変数内の特定文字列の抽出
$x=192.168.254.1
if($x =~ /(^[0-9]+\.)([0-9]+\.)([0-9]+\.)[0-9]+/){
$y1=$1;
$y2=$2;
$y3=$3;
}
この場合,
$y1=192.
$y2=168.
$y3=254.
■1行ずつ読み込み、キーワード「数字:数字」に複数マッチさせ、それぞれ
の数字を取り出す
while(<>){
@src = ();
push(@src, /[0-9]+:[0-9]+/g);
foreach $i (@src){
if($i =~ /([0-9]+):([0-9]+)/){
$n1 = $1;
$n2 = $2;
}
}
}
■配列
・push and shift
$mat=@mat; # $mat=0
push(@mat,"a"); # @mat[0]=$mat[0]=a, @mat=a
$mat=@mat; # $mat=1
push(@mat,"b"); # @mat[1]=$mat[1]=b, @mat=a b
$mat=@mat; # $mat=2
push(@mat,"c"); # @mat[2]=$mat[2]=c, @mat=a b c
$mat=@mat; # $mat=3
shift(@mat); # @mat=b c
■2次元配列(連想配列を使用)
@test =
[ a b c d
e f g
h i j k ]
・追加(push)
@test();
$test[2][0] = 'a';
push(@{$test[2]}, 'b'); #print "$test[2][1]\n"がbとなる.
・参照
print "@{$test[2]}\n"; #値は a b(値の参照)
・削除(shift)
shift(@{$test[2]});
注)連想配列を使用しているため,@temp=@testをしても値の変更は
引き継ぐ.
■ハッシュ
・初期化
%address = ();
・追加,代入,上書
$address{"ken"} = "tokyo";
・要素の削除
delete $address{"ken"};
・キーの一覧の取得
@temp = keys %address;
・配列の要素数の取得
$temp = keys %address;
・値の一覧の取得
@temp = values %address;
・キーと値の一覧を同時に取得(一番最初)
{$key, $value} = each %address;
■ハッシュ先の配列の例
##### 'red'をキーに赤いものをハッシュ先に追加する
my $i;
my %hash1 = ();
my @mat = ('fire','tomato','sun');
my @temp = ();
my @temp2 = ();
my $src = "red";
# ハッシュ先に追加
foreach $i (@mat){
push(@{$hash1{$src}}, $i);
}
# キー一覧の取得
@temp = keys %hash1;
#print "@temp\n";
# 値の表示(1)
foreach $i (@temp){
print "$i -> @{$hash1{$i}}\n";
}
# red -> fire tomato sun
# 値(配列のアドレス)の取得
@temp2 = values %hash1;
# 値の表示(2)
foreach $i (@temp2){
print "@{$i}\n";
}
# fire tomato sun
■バイナリデータを読み込んでマッチング
my $infile = 'tmp.csv';
my $data;
open(IN, "<$infile");
while(sysread(IN, $data, 1024)){ #$dataへの読込バイト数は先頭から1024
print "$data";
if($data =~ /\x30\x2c\x31\x39/o){
print "Matching.\n";
}
else{
print "No matching.\n";
}
}
close(IN);
■サブルーチン
・引数と戻り値
main(){
($d,$e) = &func1(1,@array,%hash);
}
sub func1{
my ($a, @b, %c) = @_;
my $b = $a * 2;
return ($a,$b);
}
このとき$aは1,@bは@array,%cは%hash,$dは$a,$eは$bが代入される.
・@_で受けるときは括弧が必要
&func(100);
sub func{
my ($value) = @_;
}
・サブルーチン内の変数
sub:サブルーチン内だけで有効
local:サブルーチン内とサブルーチンのサブルーチン内で有効
・参照渡し
以下の例ではサブルーチンbaiによって値が2倍になる
sub bai{
my $b = $_[0];
$$b = $$b * 2;
}
my $a = 10;
bai(\$a);
print "$a\n";
■時間
・現在時刻取得(秒単位)
$ptime = gmtime(time);
・現在時刻取得(usec単位)
use Time::HiRes( gettimeofday )
($sec, $msec) = gettimeofday;
■その他
・無限ループ
→$ptime = gmtime(time);
・for文内のlast
→forのi++はされない.
■ファイルのロック
#!/usr/local/bin/perl
#ロック用ファイルを作成
open(LOCK, ">lock.temp");
flock(LOCK,2); # ロック用ファイルをロックする
# count.datというファイルから現在のカウント数を読み込む
open (IN, "count.dat");
$count=;
close(IN);
# 現在のカウント数$countに1を追加
$count=$count+1;
# 1増加したカウントを別の一次ファイルに保存
open (OUT, ">count.temp");
print OUT $count;
close(OUT);
# 別の一次ファイルから本来のファイルに名前を変更
rename("count.temp","count.dat");
# 最初に作ったロック用ファイルを削除
unlink("lock.temp");
# ロックしたファイルを解除
flock(LOCK,8);
close(LOCK);
■ActivePerlのモジュールのインストール(手動インストール版)
1.モジュールのZIPファイルをダウンロードする
→http://ppm.activestate.com/PPMPackages/zips/
2.C:\Perl\temp\に保存
3.解凍する
4.cd C:\\Perl\temp\(解凍先ディレクトリ)\
5.ppm install hoge.ppd