.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Fork::Early 3pm" .TH Fork::Early 3pm "2021-01-05" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" AnyEvent::Fork::Early \- avoid having to exec another perl interpreter .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 2 \& # only usable in the main program, and must be called \& # as early as possible \& \& #!/usr/bin/perl \& use AnyEvent::Fork::Early; \& \& # now you can do other stuff .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" AnyEvent::Fork normally spawns a new perl process by executing the perl binary. It does this because it is the only way to get a \*(L"clean state\*(R", as the program using it might have loaded modules that are not fork friendly (event loops, X11 interfaces and so on). .PP However, in some cases, there is no external perl interpreter to execute, for example, when you use App::Staticperl or PAR::Packer to embed perl into another program, and that program runs on another system without perl installed. .PP And anyway, forking would still be more efficient, if it were possible. .PP And, as you hopefully guessed, this module makes this possible \- it must be run by the main program (i.e. to cannot be used in a module), and as early as possible. How early? Well, early enough so that any other modules can still be loaded and used, that is, before modules such as AnyEvent or Gtk2 are being initialised. .PP Upon \f(CW\*(C`use\*(C'\fR'ing the module, the process is forked, and the resulting process is used as a template process for \f(CW\*(C`new\*(C'\fR and \f(CW\*(C`new_exec\*(C'\fR, so everything should just work out. .PP Please resist the temptation to delay \f(CW\*(C`use\*(C'\fRing this module to preload more modules that could be useful for your own purposes, see AnyEvent::Fork::Template for that. .SH "AUTHOR" .IX Header "AUTHOR" .Vb 2 \& Marc Lehmann \& http://home.schmorp.de/ .Ve