出力時の改行コードを設定してみる

月曜日は、このサイトを見てくれてる方が増えるのでテンションが上がりますね。
金土は下がり続けるので、土日はテンションは低めだったりします。

ところで、printで出力した時に、
改行もしたいって場合はどうしてますか???

思いつく限りだと、これだけある。

use v5.10;
use strict;
use warnings;

print 'foo' . "\n";
print 'foo', "\n";
print "foo\n";
say 'foo';
{ local $\ = "\n"; print 'foo'; }

実行すると、こんな感じ。
$ perl aaa.pl
foo
foo
foo
foo
foo

1つ目は、先に.で連結する分、ちょっと無駄があるかもですね。
2つ目は、print LISTに沿った感じで、良く使います。
3つ目は、ダブルクォーテーションですべて括るパターンで、これも良く使います。
4つ目は、一番使いますね。
5つ目は、4つ目と同じだそうです・・・って、えっ!?

http://perldoc.jp/func/say

say LIST は単に { local $\ = "\n"; print LIST } の省略形です。

だそうです。最近、知りました。

ところで、$\って・・・?

これは、「出力レコードセパレータ」と呼ぶようです。
詳しくは、こちらをどうぞ。

Perl で定義済みの変数(perldoc.jp)

そして、これがまた便利でして、
普段は、undefが入っているそうです。

use v5.10;
use strict;
use warnings;

say '$\ is ', ( defined $\ ) ? 'defined' : 'not defined';

$ perl bbb.pl
$\ is not defined

例えば、改行コードをCRで出力したい場合はこんな感じ。

use v5.10;
use strict;
use warnings;

local $\ = "\r";
print for 0..5;

すると、Mac OS Xのターミナルだと何も表示されません。
$ perl ccc.pl

けど、こんな感じで実行して、
$ perl ccc.pl > result.txt

“result.txt”をテキストエディタで確認すると、
改行コードがCRでちゃんと出力されてます。

何に使うのって?それは、こちらご覧ください。

おしまい。

Leave a Comment