HOME | ソフトウェア | Cサンプルコード | Perlサンプルコード | 愛用フリーソフト | TIPS | ブログ |
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