unless (eval {require "fibmap.ph"}) { open C, "> fibmap.c" or die "Couldn't write configurator: $!; aborting"; print C while ; close C; system("cc -o fibmap fibmap.c") == 0 or die "Couldn't run C compiler.\n"; system("./fibmap > fibmap.ph") == 0 or die "Couldn't run configurator.\n"; unless (eval {require "fibmap.ph"}) { die "Couldn't load configurator: $@.\n"; } unlink "fibmap", "fibmap.c"; } print "Configurator ran OK; FIBMAP is $FIBMAP\n"; # ... # much code omitted here # ... __DATA__ #include #include int main(void) { printf("$FIBMAP = %d;\n1;\n", FIBMAP); return 0; }