2. スカラーデータ

初めてのPerl 第6版メモ。後で思い出せる程度に。

2.1 数値

2.1.1 すべての数値は同じ内部形式で表現される

Perlでは整数値は存在せず(内部的には使う場合があるが)、計算は倍精度浮動小数点数として行われる。

2.1.2 浮動小数リテラル 2.1.3 整数リテラル
  • 小数点の有無は関係ない。
  • 指数記法が使える。eは大文字でも小文字でもよい。
  • 可読性のためにアンダーバーを挟むことができる。10進数以外の整数リテラルでも同様。(e.g. 123_456.789_012)
2.1.4 10進数以外の整数リテラル
  • 8進数:0から始める
  • 16進数:0xから始める
  • 2進数:0bから始める
2.1.5 数値演算子
  • 四則演算:+, -, *, /
  • べき:**
  • 剰余:%

2.2 文字列

  • unicodeを使いたい:use utf8
2.2.1 シングルクォート文字列リテラル
  • バックスラッシュとシングルクォート自体はバックスラッシュでエスケープして表示する。
  • "\n"は改行記号とみなされない。
2.2.2 ダブルクォート文字列リテラル
  • 各種のバックスラッシュエスケープが使用可能
  • \n \r \t \f \b \a \e
  • ASCIIコードやUnicodeコードポイントを指定して表示できる
  • コントロール文字(C-Cは\cC)が使用可能
  • 後の1文字を小文字(\l)、大文字(\u)にできる
  • \Eまでの間のすべての文字に対し、大文字(\U)、小文字(\L)、エスケープの挿入(\Q)ができる。
2.2.3 文字列演算子
  • .:結合
  • x:繰り返し(e.g. "hello" x 3 → "hellohellohello")
    • 繰り返し回数は切り捨てによって整数に変換されてから評価される。
2.2.4 数値と文字列の自動変換
  • 演算子の種類により自動的に判断される。
  • 文字列同士に*が使われた場合、先頭から連続する数字が数値として使われる。
  • 空白文字は切り捨てられる。
  • 先頭に0があっても8進数リテラルとは判断されない。
    • e.g. "012hoge34" * " 3" → 36

2.3 Perlに組み込まれている警告メッセージ

  • 警告をさせる:use warnings;
  • コマンドラインで-wオプションでも可。
  • より詳しい警告:use diagnostics;

2.4 スカラー変数

  • $の後ろにPerl識別子を付けたもの
    • Perl識別子:英文字または下線で始まり、その後ろに英文字、数字、下線を並べたもの。大文字と小文字は区別される。
    • utf8プラグマを有効にすれば広範囲の文字を識別子に使える。
2.4.2 スカラーの代入
  • 代入は=で行う。
2.4.3 二項代入演算子

2.5 printによる出力

  • コンマで区切って複数の値を渡せる(実際にはリストである)。
2.5.1 スカラー変数を文字列の中に展開する
  • ダブルクォート文字列リテラルの中では変数展開が行われる。
  • 変数をそのままprintに渡した場合も展開される。(e.g. print $hoge, $fuga;)
  • 変数展開をしたくない場合は$をバックスラッシュでエスケープする。
  • $以降の文字列は可能な限り長い範囲が変数名として判断される。制限するにはブレースで括る。(e.g. $(hoge))
2.5.2 コードポイントで文字を生成する
  • コードポイント→文字:chr( 0x05D0 );
  • 文字→コードポイント:ord( 'א' );
  • 文字列中で直接指定:\x{03B1}
2.5.4 比較演算子
  • 文字列と数値では演算子が異なる。
  • 文字列はASCIIまたはUnicodeのソート順に従う。
数値 文字列 意味
== eq equal
!= ne net equal
< lt less than
> gt greater than
<= le less than or equal to
>= ge greater than or equal to

2.6 if制御構造

if( hoge ){
    ...
} else {
    ...
}
  • コードブロックは必ずブレースで囲むこと。

2.6.1 ブール値

  • ブール型は存在しない。
  • 数値は0のみ偽。
  • 文字列は空文字列のみ偽。
  • 否定演算子!は重ねられる。

2.7 ユーザからの入力を受け取る

  • :標準入力から次の一行を読み込んでの値として返す。
  • 通常はキーボードからの入力となり、改行を入力するまでプログラムは停止する。
  • 通常、一行は改行で終わるので改行文字を最後に含む。

2.8 chomp演算子

  • chomp():末尾の改行記号を1つ削除する。
    • 文字列そのものが変化する。
    • chomp($hoge);またはchomp $hoge;
      • 括弧は意味が変わってしまう場合以外は常に省略できる。
    • 返り値もあり、削除した改行記号の個数を返す。
  • 代入→chompは一行で書ける

2.9 while制御機構

$count = 0;
while ($count < 10) {
      $count += 2;
      ...
}

2.10 未定義値

  • undef:値が代入されるまでのスカラー変数に入っている値。
  • 数値としては0扱い。
  • 文字列としては空文字列扱い。

2.11 defined関数

  • はファイルの終わりまで読むとundefを返す。
  • defined関数:undefのとき偽、それ以外で真。
  • undef演算子:undefを返す。