In interactive usage, there are two main ways to execute Poke code: at the interactive prompt (or REPL), and loading “pickles”.
Executing Poke code at the REPL is as easy as introducing a statement or expression:
(poke) print "Hello\n" Hello
Executing Poke code in a pickle is performed by loading the file containing the code:
(poke) .load say-hello.pk Hello
Where say-hello.pk contains simply:
print "Hello\n";
However, we would like to have Poke scripts, i.e. to be able to execute Poke programs as standalone programs, from the shell. In other words, we want to use GNU poke as an interpreter. This is achieved by using a shebang, which should appear at the top of the script file. The poke shebang looks like this:
#!/usr/bin/poke -L !#
The -L command line option tells poke that it is being used
as an interpreter. Additional arguments for poke can be specified
before -L (but not after). The #! ... !#
is an
alternative syntax for multi-line comments, which allows to have the
shebang at the top of a Poke program without causing a syntax error.
This nice trick has been borrowed from guile.
Therefore, we could write say-hello as a Poke script like this:
#!/usr/bin/poke -L !# print "Hello\n";
And then execute it like any other program or script:
$ ./say-hello
Sometimes it is necessary or useful to know whether our Poke code is
being run interactively or not. For these cases, we can check the
poke_interactive_p
pre-defined variable:
if (!poke_interactive_p) { /* Set default endianness. */ }