literal (リテラル)

値を表す固定の表記法

literal (リテラル) とは、コードの中で具体的な値を表すための表記法のことです。 値の型によって「数値リテラル」「文字列リテラル」などと呼ばれます。 例えば、整数なら my $num = 4294967296; と定義できますが、 my $num = 4_294_967_296; と書くこともできます。

リテラルは Perl に限らず様々なプログラム言語で数多く用意されています。 ここでは Perl で使えるリテラルをいくつか紹介します。

数値リテラル

数値を表すリテラルには、次のようなものが用意されています。

リテラル 説明
12345 整数
12345.67 小数
23E3 乗数表記(23E3 は 23 × 10 の 3 乗を表し、23000 のことを表す)
.23E-3 乗数表記(.23E-3 は 0.23 × 10 の -3 乗を表し、0.00023 のことを表す)
4_294_967_296 桁区切りをアンダースコアで表現
0xff 16 進数表記(0xff は 255 を表す)
0377 8 進数表記(0377 は 255 を表す)
0b011011 2 進数表記(0b011011 は 27 を表す)

4_294_967_296 のように桁区切りにアンダースコアを使うことができますが、 アンダースコアーは 2 回以上連続で現れなければ、どこで使っても構いません。 Perl はアンダースコアーを桁区切りとして認識しているわけではなく、単に無視するだけです。 従って、4_294_967_29642_94_96_72_96 も同じ値を表します。

文字リテラル

文字列を表現するには、その文字列をシングルクォーテーションまたはダブルクォーテーションで囲みます。 ただし、シングルクォーテーションで囲んだ文字列の中にエスケープシーケンスや変数を入れることはできません。 シングルクォーテーションで囲んだ文字列の通りに解釈されます。

my $name = 'Taro';
print 'Hi, ${name}!\n';    # "Hi, ${name}!\n" とそのまま出力される
print "Hi, ${name}!\n";    # "Hi, Taro!" と変数とエスケースシーケンスが展開されて出力される

バージョンリテラル

バージョンを表現するためのリテラルで、基本的に Perl 本体のバージョンやモジュールのバージョンを表現するために使われます。 バージョンリテラルは、先頭が v で始まり、以降、数値をドットで区切ります。 ドットが 3 つ以上なら、先頭の v を付ける必要はありません。もちろん、付けても問題はありません。

my $ver1 = v1234;
my $ver2 = v12.34;
my $ver3 = v1.2.34;
my $ver4 = 1.2.34;
my $ver5 = 1.2.34.56;

このバージョンリテラルは、requireuse の引数として使われます。

use File::Copy v2.41;    # モジュールの最低バージョンを指定
use v5.38.0;             # Perl 本体の最低バージョンを指定
require v5.38.0;         # Perl 本体の最低バージョンを指定

リストリテラル

単独の値ではありませんが、Perl ではリストの表現もリテラルと呼びます。 Perl では配列やハッシュをリストリテラルで定義します。 リストリテラルは、要素をカンマで区切り、全体をカッコで囲みます。

my @ary  = ( 1, 2, 3 );
my %hash = ( 'taro', 23, 'jiro', 19 );