今日出会ったCPANモジュール

スカラ変数が内部的にどのような値として表現されるかを表示する。

ソースコードUTF-8 で書かれているなら,これを書いておくと吉。


今回の2つのモジュールを使ったサンプル。ソースはUTF-8で書いたものとする。

#======== Case1 ========

#!/usr/bin/perl
use strict;
use warnings;
use Devel::Peek;

Dump '今日は世界';

# <実行結果>
# $ perl try.pl
# SV = PV(0x8155658) at 0x81546a8
# REFCNT = 1
# FLAGS = (PADBUSY,PADTMP,POK,READONLY,pPOK) # <----- Unicode(UTF8)フラグはついていない
# PV = 0x815bfd8 "\344\273\212\346\227\245\343\201\257\344\270\226\347\225\214"\0
# CUR = 15
# LEN = 16

#======== Case2 ========

#!/usr/bin/perl
use strict;
use warnings;
use Devel::Peek;
use utf8;         # utf8 モジュールを追加

Dump '今日は世界';

# <実行結果>
# $ perl try.pl
# SV = PV(0x8154c08) at 0x815466c
# REFCNT = 1
# FLAGS = (PADBUSY,PADTMP,POK,READONLY,pPOK,UTF8) # <------ Unicode(UTF8)フラグがついている
# PV = 0x8194900 "\344\273\212\346\227\245\343\201\257\344\270\226\347\225\214"\0 [UTF8 #"\x{4eca}\x{65e5}\x{306f}\x{4e16}\x{754c}"]
# CUR = 15
# LEN = 16


Unicode(UTF8)フラグは,スカラ文字列に付加されるフラグで,このフラグがついた文字列への操作はバイト単位ではなく文字列単位で行われる。
つまり,Unicodeフラグのついた変数(=Unicode文字列)では,文字列関係の操作がバイト単位ではなくキャラクタ単位で行われるようになる。


出典・参考