I have a module with a function that applies a transformation on a string e.g. (this is for an Advent of Code problem, where I need to do this often)
defmodule M do
def f(some_string) do
# apply transformation on some_string
end
end
I need to run M.f
with a string passed from the command line. What is the quickest way to do this?
Please note that
- This script will never be deployed to production
- I just need an easy way to call an Elixir function with some arguments from the command line
Option 1: escript
This is clean but requires some extra code (which Iād like to avoid if possible):
# mix.exs
defmodule M.Mixfile do
def project do
[
...,
escript: escript(),
default_task: "escript.build",
]
end
defp escript do
[main_module: M.CLI]
end
end
# in m.ex
defmodule M do
...
end
defmodule M.CLI do
def main(args) do
string = hd(args)
IO.puts M.f(string)
end
end
Option 2: mix run
This requires a little extra typing ā I would like to move the IO.puts
inside the code if possible. This approach avoids having to update mix.exs
which is nice.
From the shell
% mix run -e 'IO.puts M.f "some_user_string"'
Is there an easier / quicker way to do this?