So I know that the basic Hello World Program (as in the one to output a string not the one designed for Erlang learning with spawn and other stuff) is as follows
-module(hello).
-export([start/0]).
start() ->
io:format("Hello, World!").
Then I run erl
>erl
type
>c(hello)
and then
>hello
For the escript version would it be this ?
#!/usr/bin/env escript
-export([main/1]).
main([]) -> io:format("Hello, World!~n").
Then
chmod u+x hello
Where hello is the filename ?
Why can I not use the same format as the module ? (main/0 and main()) ?
That is just the way the escript system works. Your escript must contain a function main/1 for the runtime to call. The escript needs a way to pass command line arguments to your function, and it does this as a list of strings, hence the need for your main function to take one argument.
When you build a module and run it manually from the shell, a similar requirement applies - your module must export the function you want to call (start/0 in your example).
In fact, your example is incorrect. You create and compile the module but never call it. Evaluating
hello.
In the shell simply repeats the atom value hello. To actually call your hello world function you would need to evaluate:
hello:start().
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With