{{category Parl,nolink}}Perlのメモとか小技とか… !!!TEMPLATE {{code Perl,4, #!/usr/bin/perl -T ##### Character-code is euc-jp. Tab-size is 4 space character. ##### ############################################################################### ## ############################################################################### use strict; # restrict unsafe constructs use warnings; # control optional warnings ( as /usr/bin/perl -w ) ############################################################################### ## End Of File (source.pl) ## ############################################################################### }} !strict プラグマ 変数宣言を厳密させる等々… *strict - 安全ではないコンストラクトを制限する Perl プラグマ (perldoc.jp) **http://perldoc.jp/docs/perl/5.8.1/strict.pod !warnings プラグマ perl のオプション "-w" の置き換え。オプションの場合は、スクリプト全体に適応されるが、プログラマは閉じられたブロックに限定される。 1度しか使われない変数名、設定される前に使われている変数、サブルーティンの再定義、未定義のファイルハンドルの参照や、 read-onlyでオープンしたファイルハンドルへの書き込み、数値に見えない値を数値として使った場合、配列をスカラであるかのように使った場合、 100段階以上のサブルーティンの再帰、その他たくさんの疑わしい事に警告を出します。 *warnings - 選択的な警告を調整する Perl プラグマ (perldoc.jp) **http://perldoc.jp/docs/perl/5.8.1/warnings.pod *perldiag - さまざまな Perl 診断メッセージ (perldoc.jp) **http://perldoc.jp/docs/perl/5.6.1/perldiag.pod **http://perldoc.jp/docs/perl/5.8.8/perldiag.pod !Taintモード (汚染検出モード) perl のオプションに -T を追加する。コマンドライン引数やCGIのパラメータなどの外から取得した変数をファイル名として開くときにエラーとなる。 これを回避するには、洗浄が必要となる。例えば、外部からファイル名を取得し $fn にセットして開こうとしている場合、以下のように正規表現を使ってデータの洗浄する。 if ($fn =~ /^([a-z0-9]+)$/i) {$fn = $1} else {die} ただし、洗浄が正しくされてるかどうかまでは感知してくれないので、"-T" オプションのチェックを通ったとしても安全性は保証されない。 *perlsec - Perl のセキュリティ (perldoc.jp) **http://perldoc.jp/docs/perl/5.6.1/perlsec.pod !!必要なときにだけ、no strict 'refs'; どうしても use strict にするとプログラムが動かない場合は、no strict を利用して該当箇所(ブロック内)だけその効果を無効化する。 ただし、no strict; ではすべての use strict; の効果が消されてしまう。use strict; には、vars、refs、subs の3種類の効果がある。vars はすでに our があり、subs は \&subname という書き方があるので、実際に必要となるのは no strict 'refs'; のみとなる。 Perl 6では、このstrict(とwarnings)が標準となります。例外は-eをつけて、コマンドラインから実行する場合だけです。 *参照:404 Blog Not Found:perl - use strict; # and be happy **http://blog.livedoor.jp/dankogai/archives/50502585.html !!!Perl Module !!The CPAN Search Site CPANに登録されているモジュールを検索する。 http://search.cpan.org/search?module= !!モジュールバージョン インストールされている個別のモジュールのバージョンを調べる(例はLWP)。 perl -MLWP -e 'print $LWP::VERSION . "\n"' !!!perlでいろいろ !!ディレクトリ一覧 カレントディレクトリのアイテム一覧 perl -e 'opendir(DIR, "./");print join("\n", readdir(DIR))."\n";closedir(DIR);'