-Perlの情報。どんな書き方もできるので人によって好き嫌いが分かれる。CPANというライブラリが豊富

#contents

*基本テクニック [#ece7b708]

**引数のファイルを読み込んで表示 [#d1ca99af]

-下記コードをread.plとして保存

 while(<>){
    print "$_\n";
 }

 perl read.pl 読み込みたいファイル

**ファイルハンドルから配列に読み込ませる。 [#gf643d10]


**変数宣言 [#n11fdb9e]

-通常の変数の他、配列型や連想配列などは宣言が違ってくる

 my $normal;
 my %hash = ("key" => "value");
 # 使うときは%ではなく$
 $hash{"key"};



*一行Perl [#d877c039]

**[[HTMLの一括置き換え&バックアップ:http://www.itmedia.co.jp/help/tips/linux/l0504.html]] [#k52c0933]
 perl -p -i.bak -e 's/catalog/index/g' *html

**タブの置き換え [#effb5b23]
 
 perl -p -i.bak -e 's/\t/    /g' tabtest

*CPAN [#c128b245]

[[ここ:http://www.y-kit.jp/saba/xp/cpan.htm]]を参考に設定する。ほとんどリターンキーでOKで、ミラーサイトの選択だけ慎重に!

**基本操作 [#ffa8bccc]

|対話モード|perl -MCPAN -e shell|
|直接インストール|perl -MCPAN -e 'install "Bundle::Bugzilla"'|
|config一覧を見る|cpan> O conf|
|configかえる|cpan> O conf urllist push http://newurl/|
|config保存|cpan> O conf commit|

 perl -MCPAN -e 'install "Bundle::Bugzilla"'
 
-DBIとPostgres(CentOS3.4で成功)

 perl -MCPAN -e 'install "DBI"'
 perl -MCPAN -e 'install "DBD::Pg"'

**インクルードパスの追加 [#ac4366ef]

-@INCという配列変数にしたがってモジュールを検索している。大抵カレントも含まれるので最悪ライブラリを同じ場所において置けばよい。中身みたいなら以下のコマンドで

 print join("\n",@INC);

-追加するにはこんな感じで配列に加えてやる

 unshift @INC,'/var/tmp';

-こんなやり方もある。こっちが直感的にわかりやすい気がする。

 use lib 'ライブラリへのパス';

-コードにライブラリへのパスを書くのはいやだという人には環境変数PERLLIBを設定することをお勧めする。

*Perlの使えるオプション [#ne3658bc]

**汚染検出モード [#g8ece690]

入力値をそのまま引数に渡すとエラーになる。ユーザ入力値をそのまま使うプログラムを改修する羽目になったらこいつでエラーを出して改修個所の当たりをつけるといいだろう。新規のプログラムでは当然このオプションをつけてもエラーが出ないようなプログラミングを心がけなければいけない。

*正規表現ライブラリ [#x00bd759]

-というほど大げさなものではなく、一度やったことのメモ書き。大概2ヶ月もたつと忘れてしまいますからね。

 # 改行コード除去
 $var =~ s/\r\n//g;
 $var =~ s/\n//g;
 # タブ除去
 $var =~ s/\t//g;
 # タグ除去
 $var =~ s/<.*?>//g;
 # 実体参照変換
 $var =~ s/&gt;/>/g;
 $var =~ s/&lt;/</g;
 $var =~ s/&nbsp;/ /g;
 $var =~ s/&quot;/"/g;
 $var =~ s/&amp;/&/g;

 # 英数字以外が含まれていた場合は不正とみなす。
 if ($var =~ /[^a-zA-Z0-9]+/) {
     return undef;
 }

*URLパラメータ分割 [#v673aa8d]

 use strict;
 my $url = shift;
 my @params = split(/&/, $url);
 my @empty;
 my @contain;
 foreach my $parts(@params){
  #print "$parts\n";
  @_ = split(/=/, $parts);
  if (scalar(@_) == 2) {
        push(@contain, @_[0] . "=" . @_[1]);
  } else {
        push(@empty, @_[0] . "=");
  }
 }
 foreach my $parts(@contain){
         print "$parts&\n";
 }
 foreach my $parts(@empty){
         print "$parts&\n";
 }
#counter

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS