【これだけ覚えりゃなんとか使えるPerlメモ2】リテラルと変数型


リテラル

整数リテラル

整数リテラルは以下のようなもので、_にて読みやすくすることもできる(桁区切り)。

0
2001
-20
30_289

また、0で始まるものは8進数、0xで始まるものは16進数、0bで始まるものは2進数として扱われる。

浮動小数リテラル

浮動小数は以下のようなもので、指数記法を付けることができる。

1.25
255.0
-12e24
文字列リテラル

文字列は、使用可能なメモリ分の長さを扱える。
文字列リテラルは、シングルクオート文字列リテラルと、ダブルクオート文字列リテラルがある。
シングルクオート文字列リテラルは、'fred'のようなもので、この中では、逆スラッシュかシングルクオートのみがエスケープ処理可能。
ダブルクオート文字列リテラルでは、制御文字等を逆スラッシュエスケープが可能で、変数展開が行われる。

文字列値は、「.」演算子により連結ができる。

"hello" . "world"    # "helloworld"と同じ

また、文字列繰り返し演算子により、繰り返しを表現できる。

"hello " x 3    # "hello hello hello"と同じ
"hello" x (2+1) # 上と同じ
4 x 3           # "444"

数値と文字列間の変換は、Perlにより自動的に行われる。

変数型

Perl には以下の5種の変数型が用意されており、プレフィックスとしてファニー文字を付けて表現する。

文字 説明
スカラー $ $cents 個々の値(数値または文字列)
配列 @ @large 値のリスト(数値でキーを指定)
ハッシュ % %interest 値のグループ(文字列でキーを指定)
サブルーチン & &how 呼び出し可能なPerlコードのかたまり
型グロブ * *struck struckという名前を持つもの全て

スカラーデータ

スカラーPerl が扱う最も単純なデータで、数値や文字列が該当する。
数値は Perl 内部では、整数でも浮動小数でも倍精度浮動小数により計算を行う。

$a = 123;
$b = abc;

配列

リストはスカラーを並べた集合で、配列はリストを保持する変数。


リスト値の代入

@home = ("couch", "chair", "table", "stove");


要素への代入

$home[0] = "couch";
$home[1] = "chair";
$home[2] = "table";
$home[3] = "stove";


リスト値への代入

($potato, $lift, $tennis, $pipe) = @home;


変数の入れ替え

($alpha, $omega) = ($omega, $alpha);


要素の最後のインデックス

$end = $#rocks;

ハッシュ

ハッシュの代入1

%longday = ("Sun","Sunday","Mon","Monday",
"Tue","Tuesday","Wed","Wednesday","Thu","Thursday",
"Fri","Friday","Sat","Saturday");

ハッシュの代入2

%longday = (
"Sun" => "Sunday",
"Mon" => "Monday",
"Tue" => "Tuesday",
"Wed" => "Wednesday",
"Thu" => "Thursday",
"Fri" => "Friday",
"Sat" => "Saturday");

ハッシュの値取得

%longday{"Wed"}

サブルーチン

サブルーチンは、プログラムテキストのどこに置いても構わない。

#! /usr/bin/perl
&marine;
&marine;

sub marine {
    $n += 1;
  print "Hello, sailor number $n!\n"
}

出力

Hello, sailor number 1!
Hello, sailor number 2!
戻り値

サブルーチンの中で最後に評価された結果が自動的に戻り値となる。
次の例は、$fredと$barneyのうち、大きい方の値を返却する。

sub larger_of_fred_or_barney {
  if ($fred > $barney) {
    $fred;
  } else {
    $barney;
  }
}

また、return $fred;等により、即座に値を返却することもできる。

引数

サブルーチン呼び出しにて、引数は自動的に配列変数@_に代入される。
配列変数@_の内容を、$_[0]等で参照可能。また配列変数はサブルーチンローカルな変数となる。

&max(2, 3);
sub max {
  my($a, $b) = @_;
  if ($a > $b) { $a } else { $b )
}
可変長引数

以下の例は、可変長の引数から最大値を得るサブルーチン。

$maximum = &max(3, 5, 10,2);

sub max {
  my($max_so_far) = shift @_;
  foreach (@_) {
    if ($_ > $max_so_far) {
      $max_so_far = $_;
    }
  }
}

ブール値の扱い

Perlでは独立したブール型はなく、真(true)と偽(false)の判断は以下の規則が使われる。

  • 特別な値undefは偽
  • 数値の0は偽。それ以外のすべての数値は真
  • 空文字は偽。通常それ以外は真(文字列のゼロは数値のゼロと同じため、偽となる)