ファイルハンドルにリストを出力する
print
は文字列またはそのリストを出力します。次の例は、3 つの文字列のリストを出力します。
出力内容をリストとして指定した場合、通常であれば区切りなしに連結された状態で出力されます (通常でない場合は後述します)。
print "one", "two", "three"; # "onetwothree"
筆者個人的にはお勧めしませんが、strict モード (use strict
を指定した状況) でない場合は、
FILEHANDLE にファイルハンドルの名前を含んだスカラー変数を指定することができます。
my $fh = 'STDOUT';
print $fh "one";
FILEHANDLE が省略されたら、選択中の出力ファイルハンドルへ出力します
(詳細は select
を参照してください)。
次の例は、select
を使ってデフォルトの出力ファイルハンドルを変更しています。
そして、print
にはファイルハンドルを指定せずに、該当のファイルハンドルへ文字列を出力しています。
open my $fh, '>', './sample.txt';
select $fh;
print "Hello World";
LIST が省略されたら、$_ を現在選択中の出力ファイルハンドルに出力します。
引数に FILEHANDLE だけを指定し、LIST を省略して $_ の内容を出力したい場合、
FILEHANDLE には $fh
のような間接的なファイルハンドルではなく、
FH
のようなベアワードのファイルハンドルを指定しなければいけません。
# 間違った使い方
open my $fh, '>', './sample.txt';
print $fh; # $fh は出力ファイルハンドルとして認識されず、$fh を出力しようとしてしまう
# 正しい使い方
open FH, '>', './sample.txt';
print FH; # FH は期待通りに出力ファイルハンドルとして認識される
もし組み込み変数 $,
に値がセットされている場合、LIST の各要素の間に
$,
の値が差し込まれます。
$, = ':';
print 'one', 'two', 'three'; # "one:two:three"
もし組み込み変数 $\
に値がセットされている場合、LIST のすべてが出力された直後に
$\
の値が出力されます。
$\ = '.';
print 'one', 'two', 'three'; # "onetwothree."