print 関数、printf 関数を使って文字列を出力する。ついでに sprintf 関数についてもメモしておく。
ファイルへの出力 (ファイルハンドル) については、前前前回(?)の記事を参照。
print / printf / sprintf の使い分け
文字列の出力方法によって print, printf 関数を使い分ける。sprintf 関数はコンソールやファイルへの出力ではなく、書式の変換に用いる。単純に出力したい → print
書式を指定して出力したい → printf
書式を指定して変換したい → sprintf
print [FILEHANDLE] LIST
FILEHANDLE | : ファイルハンドル |
LIST | : 出力する文字列のリスト |
$moji = 'aaa';
@array = ('aaa', 'bbb', 'ccc');
print "$moji"."\n";
print '$moji'."\n"; # '' は $moji を変数と認識しない
print "@array"."\n";
実行結果aaa
$moji
aaa bbb ccc
printf
printf 関数は書式を指定して文字列を出力する。printf [FILEHANDLE] FORMAT, LIST
FILEHANDLE | : ファイルハンドル |
FORMAT | : 書式 |
LIST | : 出力する文字列のリスト |
書式についてまとめる。(他にもあるかも...)
%% | パーセントマーク |
%d | 10進数 (符号付き) |
%u | 10進数 (符号なし) |
%b | 2進数 |
%o | 8進数 |
%x | 16進数 (符号なし) ※小文字 |
%X | 16進数 (符号なし) ※大文字 |
%f | 浮動小数 |
%e | 浮動小数 (指数表記) |
%g | 浮動小数 (%f %e 自動判定, 末尾の0は非表示) |
%c | 文字 (LISTでASCIIコード番号を指定) |
%s | 文字列 |
%p | ポインタアドレス(16進数) |
$num = 60;
printf("%%d = %d\n", $num);
printf("%%u = %u\n", $num);
printf("%%b = %b\n", $num);
printf("%%o = %o\n", $num);
printf("%%x = %x\n", $num);
printf("%%X = %X\n", $num);
printf("%%f = %f\n", $num);
printf("%%e = %e\n", $num);
printf("%%g = %g\n", $num);
printf("%%c = %c\n", $num);
printf("%%s = %s\n", $num);
printf("%%p = %p\n", $num);
実行結果%d = 60
%u = 60
%b = 111100
%o = 74
%x = 3c
%X = 3C
%f = 60.000000
%e = 6.000000e+01
%g = 60
%c = <
%s = 60
%p = 176f2a8
複数の文字列を指定することもできる。
$num1 = 10;
$num2 = 20;
$num3 = 30;
printf("%d %d %d\n", $num1, $num2, $num3);
実行結果10 20 30
次は修飾子について。書式指定時に % の直後に修飾子を付加することで、書式をフォーマットすることができる。
%n | nは文字列の長さを示す整数。右詰めとなる。 |
%0n | nは文字列の長さを示す整数。右詰め & 0埋めとなる。 |
%-n | nは文字列の長さを示す整数。左詰めとなる。 |
%+ | 符号(+ -)を付加。 |
%# | 識別子(16進: 0x, 8進: 0, 2進: 0b)を付加 |
%.m | mは少数点以下の桁数。浮動小数(%f %e)で使用。 |
$num = 60;
printf("%%8d = %8d" ."\n", $num);
printf("%%-8d = %-8d" ."\n", $num);
printf("%%08d = %08d" ."\n", $num);
printf("%%+d = %+d" ."\n", $num);
printf("%%#x = %#x" ."\n", $num);
printf("%%.2f = %.2f" ."\n", $num);
printf("%%8.2f = %8.2f"."\n", $num); # %n.m の組み合わせも可能
実行結果%8d = 60
%-8d = 60
%08d = 00000060
%+d = +60
%#x = 0x3c
%.2f = 60.00
%8.2f = 60.00
sprintf
sprintf 関数を使用して、書式の変換を行うことができる。sprintf FORMAT, LIST
FORMAT | : 書式 |
LIST | : 出力する文字列のリスト |
$num = 60;
$sig_num = sprintf("%+d", $num); # 符号付加
$hex_num = sprintf("%#x", $num); # DEC->HEX 変換
print "$sig_num"."\n";
print "$hex_num"."\n";
実行結果+60
0x3c
上記の例では 10進数 → 16進数 の変換を行っているが、16進数 → 10進数 の変換を行う場合は、数値と文字列ではやり方が異なるので注意。文字列の場合は hex 関数を使用する。
$hex1 = 0x3C; # 数値
$hex2 = '0x3C'; # 文字列
$hex3 = '3C'; # 文字列 (0x 省略)
# HEX->DEC 変換
$dec1 = sprintf("%d", $hex1);
$dec2 = hex $hex2;
$dec3 = hex $hex3;
print "$dec1 $dec2 $dec3\n";
実行結果60 60 60
0 件のコメント:
コメントを投稿