Perl Perl_0
Perl 「 リストリテラル 」(0x1d)

Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x1d 回。
リストデータをプログラムコードに直接書く場合の リストリテラル と、範囲演算子 の マジカルインクリメント について。
リテラルの再確認
「 Perl リテラル (定数 !?) (0x07)」で確認した通り、リテラル とは「 直定数 」を意味します。「 リテラル = 直定数 」で「 コンスタント = 定数 」です。
Perl でのリテラル は次の様なものです。
# Perl
$char = "a"; # char は変数 a は文字列リテラル
$int = 1; # int は変数 1 は整数リテラル
$string = "Hello"; # string は変数 Hello は文字列リテラル
リストリテラル (List literal)
リストリテラルは、プログラムコード内にリストデータを書いたものです。リストリテラルは、値を「 , (カンマ)」 で区切って並べ、「 ( ) 」で囲みます。
(1, 2, 3) # 数値のリスト
("Foo", "Bar", "Baz") # 文字列のリスト
("Foo", 1.9) # 文字列と数値のリスト
(1..5) # 1 - 5 の 5 個の整数のリスト
("a".."z") # a - z の 26 個の英文字のリスト
($foo, $bar) # 変数 $foo と $bar の値のリスト
(0..$#array) # 配列 @array の添え字リスト
() # 空のリスト
4 行目のリストにある「 .. 」は範囲演算子 (Range operator) という二項演算子で、「 (1, 2, 3, 4, 5) 」とした場合と同じリストを作ります。
同じく 5 行目のリストでは「 ("a", "b", "c", "d", (中略) "y", "z") 」とした場合と同じリストを作ります。
7 行目は、配列の最後の添え字 (インデクス) にアクセスする記法を使って、配列 @array の添え字リストを作っています。
マジカルインクリメント
Perl では、「 ("a" .. "z") 」の様に文字をインクリメントする機能を、「 マジカルインクリメント 」と呼ぶそうです。
範囲演算子がリストコンテキスト (リストの文脈) で使われた場合には、このマジカルインクリメントの能力が発動します。同じ範囲演算子をスカラコンテキストで使うと、値の 真偽 を返す様になるとのことです。
マジカルインクリメントは、例えば次の様に動作をします。ここではインクリメントに演算子「 ++ 」を使い、「 '' (シングルクォーテーション)」を使って数値も文字列として扱っています。
print ++($foo = 'a'), "\n"; # b を表示
print ++($bar = 'az'), "\n"; # ba を表示
print ++($baz = 'z9'), "\n"; # aa0 を表示
print ++($qux = 'z9'), "\n"; # aa0 を表示
print ++($quux = 'yzz'), "\n"; # zaa を表示
このマジカルな動作はインクリメントに限られていて、デクリメントには対応していません。もちろん、対象が数値であれば、通常通りデクリメントは可能です。
0x1d -> 0x1e へ
「 マジカルインクリメント 」。なんとも素敵な響きです。
「 インクリメント 」だけでも心躍る僕にとって、「マジカル」との組み合わせは、なんらかひとつの到達点を示している様に思えます。
「 Magical Increment 」と、アルファベットの字面も素晴らしい。それは愛でるに値すると言っても過言ではないでしょう。
「 リストリテラル 」もなかなか良い感じです。やや端正な雰囲気があります。愛でるというよりは鑑賞する。眺めるといった感じでしょうか。
「リストリテラル」は、「アストラル」の類型に属するものだと推測出来ます。少なくとも「ランバラル」とは別の系統です。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0x1e) へ続く
過去記事 RSS
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)