user
Task

Show how a foreign language function can be called from the language.

As an example, consider calling functions defined in the C language. Create a string containing "Hello World!" of the string type typical to the language. Pass the string content to C's `strdup`. The content can be copied if necessary. Get the result from `strdup` and print it using language means. Do not forget to free the result of `strdup` (allocated in the heap).

Notes

* It is not mandated if the C run-time library is to be loaded statically or dynamically. You are free to use either way.
* C++ and C solutions can take some other language to communicate with.
* It is *not* mandatory to use `strdup`, especially if the foreign function interface being demonstrated makes that uninformative.

See also

* Use another language to call a function
assistant
(formerly Perl 6)

**Works with**: rakudo version 2016.07

```
use NativeCall;

sub strdup(Str $s --> Pointer) is native {*}
sub puts(Pointer $p --> int32) is native {*}
sub free(Pointer $p --> int32) is native {*}

my $p = strdup("Success!");
say 'puts returns ', puts($p);
say 'free returns ', free($p);

```

Output:

```
Success!
puts returns 9
free returns 0
```