INDEX
Perlのメモとか小技とか…
TEMPLATE
1 |
#!/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)
warnings プラグマ
perl のオプション "-w" の置き換え。オプションの場合は、スクリプト全体に適応されるが、プログラマは閉じられたブロックに限定される。
1度しか使われない変数名、設定される前に使われている変数、サブルーティンの再定義、未定義のファイルハンドルの参照や、 read-onlyでオープンしたファイルハンドルへの書き込み、数値に見えない値を数値として使った場合、配列をスカラであるかのように使った場合、 100段階以上のサブルーティンの再帰、その他たくさんの疑わしい事に警告を出します。
- warnings - 選択的な警告を調整する Perl プラグマ (perldoc.jp)
- perldiag - さまざまな Perl 診断メッセージ (perldoc.jp)
Taintモード (汚染検出モード)
perl のオプションに -T を追加する。コマンドライン引数やCGIのパラメータなどの外から取得した変数をファイル名として開くときにエラーとなる。
これを回避するには、洗浄が必要となる。例えば、外部からファイル名を取得し $fn にセットして開こうとしている場合、以下のように正規表現を使ってデータの洗浄する。
if ($fn =~ /^([a-z0-9]+)$/i) {$fn = $1} else {die}
ただし、洗浄が正しくされてるかどうかまでは感知してくれないので、"-T" オプションのチェックを通ったとしても安全性は保証されない。
- perlsec - Perl のセキュリティ (perldoc.jp)
必要なときにだけ、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
Perl Module
The CPAN Search Site
CPANに登録されているモジュールを検索する。
http://search.cpan.org/search?module=<Module-Name>
モジュールバージョン
インストールされている個別のモジュールのバージョンを調べる(例はLWP)。
perl -MLWP -e 'print $LWP::VERSION . "\n"'
perlでいろいろ
ディレクトリ一覧
カレントディレクトリのアイテム一覧
perl -e 'opendir(DIR, "./");print join("\n", readdir(DIR))."\n";closedir(DIR);'
最終更新時間:2009年02月19日 19時15分23秒 指摘や意見などあればSandBoxのBBSへ。