ヽ(´・肉・`)ノログ

How do we fighting without fighting?

ElixirのIO周りを試す

ElixirのGetting StartedのIOを翻訳して色々知ったので試していく.

シェバング(shebang)について

ファイルの1行目に書くシェバングは

#!/usr/bin/env elixir

でいいみたい.

標準出力を試す

#!/usr/bin/env elixir
IO.puts "hello"

という内容のファイルを作って,hello.exsとして保存.

elixirのファイルはexかexsという拡張子にするのが標準的で

となっている.

$ chmod 755 hello.exs
$ ./hello.exs
hello

うむ.標準出力されているようだ.

標準入力を試す

#!/usr/bin/env elixir
case IO.gets "yes or no? " do
  "yes\n" -> IO.puts "yes!"
  "no\n"  -> IO.puts "no!"
end

という内容のファイルを作って,input.exsとして保存.

$ chmod 755 input.exs
$ ./input.exs
yes or no? yes
yes!
$ ./input.exs
yes or no? no
no!
$ echo 'yes' | ./input.exs
yes or no? yes!

うむ.標準入力を使っているようだ.

標準エラー出力を試す

#!/usr/bin/env elixir
IO.puts "stdout"
IO.puts :stderr, "stderror"

という内容のファイルを作って,error.exsとして保存.

$ chmod 755 error.exs
$ ./error.exs
stdout
stderr
$ ./error.exs > /dev/null
stderr

うむ.標準エラー出力を使っているようだ.

> /dev/null

は,標準出力を /dev/null へリダイレクトしている(標準出力を捨てている).

つまり標準エラー出力だけが表示されるはずで,そのとおりになっている.

日本語を試す

#!/usr/bin/env elixir
case IO.gets "ほげ or ふが? " do
  "ほげ\n" -> IO.puts "ほげ!"
  "ふが\n" -> IO.puts "ふが!"
end

という内容のファイルを作って,multibyte.exsとして保存.

$ chmod 755 multibyte.exs
$ ./multibyte.exs
ほげ or ふが? ほげ
ほげ!
$ ./multibyte.exs
ほげ or ふが? ふが
ふが!
$ echo "ほげ" | ./multibyte.exs
ほげ or ふが? ほげ!

うむ.日本語も平気なようだ.

ファイルの読み込み

#!/usr/bin/env elixir
doc = File.read! "foo.txt"
IO.puts doc

という内容のファイルを作って,file_input.exsとして保存.

$ echo "あいう\nえお" > foo.txt
$ chmod 755 file_input.exs
$ ./file_input.exs
あいう
えお

うむ.読み込める.

ファイルの書き込み

#!/usr/bin/env elixir
File.write! "bar.txt", "かきく\nけこ"

という内容のファイルを作って,file_output.exsとして保存.

$ cat bar.txt
cat: bar.txt: No such file or directory
$ chmod 755 file_output.exs
$ ./file_output.exs
$ cat bar.txt
かきく
けこ

うむ.書き込めている.

異なるノード間でのIOのやりとり(わからなかった)

「Erlang VMは同じネットワークの異なるノード間でファイルプロセスを交換し, どちらのノードであってもファイルを読み書きできます.」

というのをどう試せばよいのかよくわからなかった. 修行が足りない.