There’s more than one way to do it.

Perlを使ったCGIについてはSanRin舎 » CGI/Perlを参照。

推奨されている記述

perl use strict;
use warnings;

strictを設定しておくと、宣言されてない変数があるとエラーがでたりする。 warningsを設定しておくと警告を出してくれる。

#!/usr/local/bin/perl -w

でも警告はでるが、

  • -wは.plには有効でも.pmには有効ではない
  • no warnings ‘whatever’;できない

という理由からuse warnings;の方が良い。

参照

演算子

メモ

特殊変数

特殊変数 説明
$_ アンダーライン( _ )は最後に検査されたファイルを示す

ワンライナー

元ファイルの順番を保持して、重複を除去するワンライナー

$ perl -ne 'print if!\$line{\$\_}++' test.txt 

正規表現

?:をつけるとグループ化してもキャプチャしない。

例)【正規表現】グループ化はするが、キャプチャはしない – セカンドノート

ファイル操作

ファイルオープンは次のように書く

open( my $fh, "<", $file ) or die "$!";

補足

ファイルオープンの仕方はPerlにおけるファイルハンドルの概念を理解する – サンプルコードによるPerl入門によると5種類あり、上記の方法は

# 3. 型グロブへのリファレンス *FH
my $fh = \*FH;
open( $fh, "<", $file ) or die "$!";

my $fh = *FH;の部分を自動的に行なっているのだそうだ。昔はベアワードのファイルハンドルを使った方法

open FH, '<', $some_file;

がよく使われていたが、ベアワードはグローバルなので今はmyを使った方法が推奨されている(ベアワードのファイルハンドルをつかわない方がいい理由 – ”><xmp>TokuLog 改メ tokuhirom’s blog)。

ファイルをすべて読み込む

グローバル変数$/(入力レコードセパレータで、デフォルトでは改行文字)をローカル化すると行入力演算子でファイルの内容をすべて読み込むことができる(ファイルのすべてを飲み込む方法)。

open my $fh, '<', './inputfile' or die "failed to open: $!";
my $content = do { local $/; <$fh> };

File::Find::find

指定したディレクトリ内のファイルやディレクトリを再帰的に検索する。

Getopt

実行するスクリプトのパラメータを受け取る。

メモ

  • #!/usr/bin/env perlと書くとPerlの場所を探してくれる