今回はPerlで使う型について。
Perlの変数の型は、スカラー、配列、ハッシュ(連想配列)の3種類に大きき分けられ、変数の頭にそれぞれ $, @, % を付加することで判別する。
整数/浮動小数点/文字列 などを自動で判別してくれる。
スカラー
スカラー ($) には1つの値を格納できる。bash と似ているが、Perlは値を代入する際も '$' が必要なので注意。$x = 2;
$y = 10.5;
$z = "abc";
print "$x, $y, $z\n"; # 出力結果: 2, 10.5, abc
配列
配列 (@) は複数の値を格納できる。個別に要素を操作する場合は '@' ではなく '$' を使用する必要がある点に注意。また、配列に要素を代入する際は左側が0番地になる。
# 要素を代入
@array = ('a', 'b', 'c', 'd');
print "@array ([0] = $array[0])\n";
# 先頭の要素に追加
unshift @array, 'S';
print "@array\n";
# 先頭の要素を削除
shift @array;
print "@array\n";
# 末尾の要素に追加
push @array, 'E';
print "@array\n";
# 末尾の要素を削除
pop @array;
print "@array\n";
# 要素を上書き ('$' を使用)
$array[1] = 'M';
print "@array\n";
# 要素を抽出 ('$' を使用)
$x = $array[1];
print "$x\n";
実行結果a b c d ([0] = a)
S a b c d
a b c d
a b c d E
a b c d
a M c d
M
splice 関数を使えば複雑な処理もできるようになる。
@array = ('a', 'b', 'c', 'd');
print "@array\n";
# 要素を複数上書き (@array の[2]から3つ上書き)
splice @array, 2, 3, 'X', 'Y', 'Z';
print "@array\n";
# 途中に要素を追加 (@array の[2]に挿入)
splice @array, 2, 0, 'M';
print "@array\n";
# 途中の要素を削除 (@array の[2]から1つ削除)
splice @array, 2, 1;
print "@array\n";
実行結果a b c d
a b X Y Z
a b M X Y Z
a b X Y Z
文字列の配列を指定する場合はクォート演算子(qw)を使うと入力が楽になる。文字列内にスペースがある場合は使えないのが欠点。
@array = ('aaa', 'bbb', 'ccc');
@array = qw(aaa bbb ccc);
ハッシュ(連想配列)
(キー => 値) で指定する。キーは文字列扱いになる。こちらも個別に要素を操作する場合は '%' ではなく '$' を使用する必要がある点に注意。# 要素を代入
%hash = (key1 => 'abc', key2 => 'def', key3 => 'ghi');
print "$hash{key1} $hash{key2} $hash{key3}\n";
# 要素数を取得
$num = keys %hash;
print "$num\n";
# 要素を追加
$hash{key4} = 'xyz';
$num = keys %hash;
print "$num $hash{key4}\n";
# 要素を削除
delete $hash{key2};
$num = keys %hash;
print "$num\n";
## キーの存在確認 (存在していれば 1 が返る)
$result = exists $hash{key2};
print "$result\n";
$result = exists $hash{key1};
print "$result\n";
実行結果abc def ghi
3
4 xyz
3
1
おまけ
use strict;use warnings;
を記述しておくと構文チェックをしてくれます。一般的にこれらはほぼ必須とされているようです。
strict を使用する場合は、変数の局所化をしないと "パッケージ名を明示していないグローバル変数がある" と怒られるので注意。変数宣言時に変数の前に my を付ければ解決するよ。
0 件のコメント:
コメントを投稿