地球ウォーカー2

Scala, Python の勉強日記

初めてのPerl その1(1〜2章)

CGI+Perlで何か作ってみたくて、初めてのPerlを購入した。
今日から少しずつ読んで内容を簡単にまとめようと思う。
※まとめ内の注釈は、本書に書いていない自分用メモ。間違っている可能性あり。
※初版が2003年だから*1少し古い内容もあるかもしれない。

1章 Perl入門

Perlについて
  • "Pratical Extraction and Report Language"(実用データ取得レポート作成言語)の略。
  • もしくは、"Pathologically Eclectic Rubbish Lister"(病的折衷主義のがらくた出力機)の略。
  • CPANとかサポートページとか。
  • コメントは#を使う。
  • バッククォート(`)は外部コマンドの実行。

2章 スカラーデータ

スカラーデータ
  • Perlが取り扱うもっとも単純なデータ*2
  • 文字列や数値など。
数値
  • 全ての数値は(内部的には)倍精度浮動小数点数
  • 整数リテラルにアンダースコアをつけることができる。1_0001000と同値。
  • 0b始まりは2進数(Ver.5.6+より使用可)、0始まりは8進数、0x始まりは16進数。
文字列
  • シングルクォート文字列リテラルとダブルクォート文字列リテラルがある*3
  • シングルクォート文字列リテラル
    • \'\\を除く全ての文字が単なる文字と認識される。
  • ダブルクォート文字列リテラル
    • バックスラッシュでエスケープシーケンスを使える。
  • 文字列演算子
"Hello" . "world"   # → "Hello world"
"Perl" x 3    # → "PerlPerlPerl"
5 x 3         # → "555"
数値と文字列の自動変換
  • 演算子によって数値と文字列を自動変換する。
  • 例えば、+の左は数値、.の左は文字列。
  • 数値変換する文字列は、末尾にある数字以外の文字と先頭の空白は無視される。
  • 数値が無い場合は0に変換される。
    • 12testt3412に変換される。
警告メッセージ
  • 数字以外が混在した文字列を数値に変換するときとかに警告を出すように設定できる。
  • コマンドライン-wを指定する*4
スカラー変数
  • $」+「Perl識別子」。
  • Perl識別子は、英文字または_で始まるsnake_case
print演算子
  • printでコンソールに出力する
  • カンマ区切りで、複数の文字列を渡せる。
    • print "Hello", " world\n"
  • ダブルクォート内のスカラー変数名は値で置き換えられる。
$obj = "pen";
print "They are two ${obj}s."   # → "They are two pens."
比較演算子
ブール値
  • Perlにはブール型がない。
  • undef、数値の0、空文字列と'0'は偽、それ以外は全て真*5
標準入力
  • を使う。
  • が返す文字列には、末尾に改行文字が含まれる。
chomp演算子
  • 末尾が改行コードの文字列に対して、改行文字を削除する。
  • 良く使うイディオム:
chomp($text = <STDIN>);    # 末尾の改行文字を削除してテキストを読み込む
  • 戻り値として取り除いた文字の個数を返すが、あまり役に立たない。
  • ファイルの終わりの場合、変数の値はundef
defined関数
  • 引数がundefならば偽、それ以外は真を返す
  • ファイルの終わりまで読み込むイディオム:
while (defined($line = <STDIN>)) {
  # do something.
}
その他
  • 特に理由がある場合を除き、入力は必ずchompすること。
  • Perlのモットーは、"There Is More Than One Way To Do It."。

とりあえず

今日はここまで。

初めてのPerl
初めてのPerl
posted with amazlet at 09.09.14
ランダル・L. シュワルツ トム フェニックス
オライリージャパン
売り上げランキング: 13789

*1:買ったのは2009年3月9日発行の第13刷

*2:他言語でいうところのプリミティブ型

*3:ダブルクォートの方が他言語の文字列ライクなので使いやすそう

*4:-w.pmで無効だからuse warnings;を使った方が良い、と誰かが弾言してた。

*5:JavaScriptのstring型、number型の型変換と同じ