Use another language to call a function
This SO answer, by JJ Merelo, explained the difficulty on providing a simple solution. So this attempt takes the same approach as PicoLisp by summoning the interpreter at run time.
query.p6
#!/usr/bin/env perl6
sub MAIN (Int :l(:len(:$length))) {
my Str $String = "Here am I";
$*OUT.print: $String if $String.codes ≤ $length
}
query.c
#include<stdio.h>
#include<stddef.h>
#include<string.h>
int Query(char *Data, size_t *Length) {
FILE *fp;
char buf[64];
sprintf(buf, "/home/user/query.p6 --len=%zu", *Length);
if (!(fp = popen(buf, "r")))
return 0;
fgets(Data, *Length, fp);
*Length = strlen(Data);
return pclose(fp) >= 0 && *Length != 0;
}
Output:
gcc -Wall -o main main.c query.c
./main
Here am I