6. 入出力

Perl6で最も一般的な 入出力 インタフェースは 端末ファイル の2つです。

6.1. 端末を使った基本的な入出力

6.1.1. say

say は標準出力に書き出しを行い、その際、最後に改行を追加します。つまり、以下のコードでは:

say 'Hello Mam.';
say 'Hello Sir.';

出力は2行になります。

6.1.2. print

printsay に似ていますが、改行を追加しません。

sayprint に置き換えて結果を比べてみてください。

6.1.3. get

get は端末からの入力を受け取るために使います。

my $name;

say "Hi, what's your name?";
$name=get;

say "Dear $name welcome to Perl 6";

上のコードを実行すると、端末はあなたが名前を入力するまで待ちます。 それからあなたにあいさつしてくれるでしょう。

6.1.4. prompt

promptprintget を組み合わせたものです。

上の例は、このように書くことができます:

my $name = prompt("Hi, what's your name? ");

say "Dear $name welcome to Perl 6";

6.2. シェルコマンドの実行

シェルコマンドの実行には2種類のサブルーチンが使えます:

  • run はシェルを介さずに外部コマンドを実行します。

  • shell はコマンドをシステムのシェルを介して実行します。パイプ、リダイレクト、環境変数の展開など、すべてのシェルのメタキャラクタの展開がシェルによって行われます。

my $name = 'Neo';
run 'echo', "hello $name";
shell "ls";

echols はよく使われるシェルコマンドです。
echo はテキストを端末に表示します(Perl6で言う print です)。
ls はカレントディレクトリのすべてのファイルとフォルダを表示します。

6.3. ファイル入出力

6.3.1. slurp

slurp はファイルからデータを読み込むのに使います。

下の内容のファイルを作って試してみてください:

datafile.txt
John 9
Johnnie 7
Jane 8
Joanna 7
my $data = slurp "datafile.txt";
say $data;

6.3.2. spurt

spurt はデータをファイルに書き出すのに使います。

my $newdata = "New scores:
Paul 10
Paulie 9
Paulo 11";

spurt "newdatafile.txt", $newdata;

上のコードを実行すると、 newdatafile.txt という名前のファイルが作られます。中身は新しいスコア表になっているはずです。

6.4. ファイルとディレクトリの操作

Perl6では、ディレクトリの中身を表示するのに、先の例のようにシェルコマンド(ls)を実行する必要はありません。

say dir;              # カレントディレクトリのファイルとフォルダを表示する
say dir "/Documents"; # 指定されたディレクトリのファイルとフォルダを表示する

さらに、新しいディレクトリを作成したり、削除したりすることもできます。

mkdir "newfolder";
rmdir "newfolder";

mkdir は新しいディレクトリを作成します。
rmdir は空のディレクトリを削除します。ディレクトリが空でない場合にはエラーを返します。

指定のパスが存在するか、また、それがファイルなのかディレクトリなのかをチェックすることもできます:

下のスクリプトを実行するディレクトリに空のフォルダ folder123 と空の pl6 ファイル script123.pl6 を作って試してみてください。

say "script123.pl6".IO.e;
say "folder123".IO.e;

say "script123.pl6".IO.d;
say "folder123".IO.d;

say "script123.pl6".IO.f;
say "folder123".IO.f;

IO.e はディレクトリ/ファイルが存在するかチェックします。
IO.f はそのパスがファイルなのかどうかチェックします。
IO.d はパスがディレクトリなのかどうかチェックします。

入出力についてさらに詳しくは http://doc.perl6.org/type/IO(英語) を参照してください。