Revision history for Perl extension HTML::Embperl. 1.1b3_dev - Added support for perl5.005 (currently only without threads!) - Nesting of metacommands and html tags is now independend of each other. - Added examples in eg/x for do .. until, foreach, if, DBI datbase access, DBIx::Recordset database access and a input- / confirmation form. - Added optUndefToEmptyValue which will cause Embperl to treat non existent values in %fdat as empty string in input tags, as suggested by Steve Willer. - Catch "die" within EMBPERL_INPUT/OUTPUT_FUNC and write error message to the logfile - Write error message of LWP::UserAgent in ProxyInput to logfile if any - Added test for POST Requests - Added support for tests when mod_perl is build with USE_DSO. Spotted by Christian Oyarzun. - Selects and checkboxes are setup correctly if state is set via %fdat. Spotted by Todd Eigenschink and Steve Willer. - Changes URL escaping than only space, '+', '&', '=' and chars < 0x20 will be escaped to avoid problems with older netscape browsers. - Added missing documentation for req_rec parameter of the Execute function. Spotted by Eric Cholet. - Send correct http header for error page, spotted by Steve Willer - Fixed a memory leak in foreach metacommand - Removed limit of 2048 Bytes for GET requests data (there is no limit anymore. Spotted by Steve Willer - Read all POSTed data (not just the first 1024 Bytes). Patch from Steve Willer. - Removed some compiler warnings spotted by Tarang Kumar Patel - Make sure all data is flushed to the logfile at the end of each request - Fixed a bug that causes Init to set DebugFlags to 1 instead of 0. Spotted by Eric Cholet. 1.1b2 27 Jun 98 - Added an additional note for input- and output escaping which is described in "Inside Embperl" section. It's very imported to understand this, if you have any problems with html tags or filehandles in your perl code. - Embperl will recognize Apache::exit. If called, inside a Embperl page or in a module called from a Embperl page, the processing of the document is imediately aborted. Everything processed so far is outputed/send to the browser. Based on a patch from Steve Willer. - When running under mod_perl exit is a alias for Apache::exit in every document. - Enhanced the format of the Errorpage. Thanks for the patch from Steve Willer - Added a [$ foreach $] and a [$ do $] ... [$ until $] metacommand - Now multiple checkboxes with the same name will be set correctly, to the values posted to the document. Spotted by Todd Eigenshink and Nathan Krislock. - [+ local $escmode = 0 .... +] works now. The first setting of $escmode in a [+ ... +] block will now applied to the whole block. You cannot change $escmode inside a [+ ... +] block. Spotted by Chris Thormann. - Fixed the return path setting in MailFormFields - ProxyInput now passes http headers, so authentification will be passed thru. - Removed the limit 2048 for the lenght of html tags when [+ ... +] are included. Now there is no limit anymore. Spotted by Doug Bagley 1.1b1 14 Jun 98 - Now you can set custom input and/or output functions via EMBPERL_INPUT_FUNC and EMBPERL_OUTPUT_FUNC. This can be used to chain modules together or to get the input from/ put the output to non-standard locations. - Added a function ProxyInput which can be used to fetch the input from another URL instead of the disk. One possible usage for this is, to let first mod_include parse the document and the Embperl. Suggested by Steffen Geschke. - Added a function LogOutput, which will write every generated document to a unique file in addition to send it to the browser. Suggested by Dan Peterson. - EMBEPERL_FILESMATCH allows you to selected which files in a Location should be processed by Embperl. The rest is handled by the apache default handler. This gives you the chance to have Embperl and non-Embperl documents (like gifs etc.) in the same directory. - Logfile was displayed at the wrong position, when requested via the browser the first time after the httpd was started 1.0.0 12 Jun 98 - Make tests run with Apache 1.3.0, spotted by Eric Cholet - Added a definition for MAX_PATH, which is not there on SunOS 4.1.4 spotted by Dan Peterson - Fixed a bug that causes Makefile.PL interpret MakeMaker parameters spotted by Jason Bodnar - Fixed a bug that caused EMBPERL_PACKAGE not to be recognized - Fixed a bug that caused optDisableFormData not to be recognized for multipart formdata 0.28-beta 19 May 1998 - I have added a chapter "Inside Embperl" to the docs, I hope this will make it clearer how escaping and unescaping works and how you can get which result. Highly recommended! (Thanks for spell- and gramar- checking to Todd Eigenshink) - make test now runs under win32 (You need to install LWP and libwin32) IMPORTANT: You need a mod_perl version > 1.11 or you get a deadlock - Compiles with apache_1.3b6 - Added support for Stronghold and Apache_SSL to Makefile.PL and test.pl - Changed dbgEarlyHttpHeader to optEarlyHttpHeader because it's not a debugging option. dbgEarlyHttpHeader still persits, but will be removed in one of the following versions - Embperl does not change the current working directory when optDisableChdir is set, this saves some milliseconds perl request, also the cwd is moved to the c code, so it runs faster then Cwd::fastwd. Thanks to Doug Bagley for the profile which has shown how much time Cwd::fastcwd consumes - You can set optDisableHtmlScan in EMBPERL_OPTIONS. If set, Embperl only recongizes [+/-/$/! ... !/$/-/+], but will not do anything with html tags, as suggested by Randy Harmon. - optDisableInputScan, optDisableTableScan and optDisableMetaScan can be used to disable only some of the html tag processing - You can set optDisableFormData in EMBPERL_OPTIONS. If set, Embperl will not setup the %fdat and @ffld, as suggested by Doug Bagley - If you use Execute the explicit call to Init/Term isn't needed anymore, because Embperl performs the Init automaticly when it is loaded. The Init function can still be used to change the path of logfile. Suggested by Honza Jirousek - All options and debugging flags can now be read/set at runtime. For example $optRawInput = 1 sets the optRawInputFlag. Some of the options are readonly, because they must be known before the request. - Added more tests - Embperl discards all errors which occurs in an expression after the end of an dynamic table, which are only evaled to detect the table end and never displayed. This allows usage of objects methods in dynamic tables, where the table end is caused by a undefined object. (see test/html/object.htm for an example). Spotted by Jason Bodnar. - Printing to filehandle OUT has the same effect as using [+ .. +] (including html-escaping) - Setting optRedirectStdout cause Embperl to tie STDOUT to the Embperl output stream (same as print OUT ...), suggested by Jason Bodar - Setting optAllFormData will make empty formfields occur in %fdat and @ffld with an empty string value, suggested by Dan Peterson - Embperl now handles SELECT MULTIPLE correct. All OPTIONs which are posted to the document will now be selected by Embperl, spotted by Todd Eigenschink - Fixed a bug that cause a '>' inside a [$/! ... !/$] block to be interpreted as end of html tag spotted by Todd Eigenschink. - Fixed a bug that causes the SELECT/OPTIONS tag not insert their values in %idat and therefor make [$hidden$] work incorrect, spotted by Dave Paris [aka Spider] - Fixed a bug that causes the INPUT CHECKBOX tag not insert their values in %idat when value isn't in %fdat and therefor make [$hidden$] work incorrect. - Fixed a problem that causes magicaly variables to be handled as if they were undefined, which caused a end of dynamic tables - Closing html tags will be correctly removed form perl source again (when optRawInput is not set) -   will be translated to space (0x20) instead of 0xf0 - When EMBPERL_DEBUG is set 0, only errors and warnings will be written to the logfile - MailFormTo will generate correct TO header and insert a Return-Path from the posted email adress - Changed detection of mod_perl to $ENV{MOD_PERL}. This makes sure that it will correctly work, even if Apache.pm isn't loaded. - Reentered the optDisableEmbperlErrorPage which was lost in one of the last releases, spotted by Doug Bagley. - The content_length of the apache request_rec will only be set when a http header is send. - If, Elsif and While metacommands now use SvTRUE instead of a != 0 to test the evaled expression, so behave like the perl ones do. Spotted by Jason Bondar 0.27-beta not available 0.26-beta 16 Mar 98 - Adapt include pass to compile with apache_1.3b5 - Applied patch from Dan Walters to make Embperl compile with apache_1.3b3 and mod_perl on Win 32 - Changed the order of included c headers and undef some macros inbetween (copied from mod_perl.c) to compile with apache on Win 32 - Embperl works with apache_1.3b5 on win nt (make test does not yet) (You need the apache sources and must compile perl with the vc++) - Added the 'param' parameter to the Execute function to pass parameters from and to the Embperl document. - Added the 'fdat' and 'ffld' parameter to the Execute function to setup %fdat and @ffld - Fix a problem which displays tables a second time after the end of the document, if dbgEarly HttpHeaders is on, thanks to Ask Bjorn Hansen for spotting this. - Fix the return values of CheckFile, which was not correct after a change from 0.24 to 0.25. Thanks to Todd Eigenschrink for spotting this. - Fix an error causing Embperl to crash on an html input tag without the type parameter. Thanks to Todd Eigenschrink for the hint. - Fix a problem that causes Embperl to not correctly recognices an error when reading the sourcefile 0.25-beta 17 Feb 1998 - Included the "translation" of the Embperl POD to a human readable form done by Todd Eigenschink - Started a FAQ file form the questions I answered per email - Added a the function Execute, which can be call form perl programs (or Apache::Registry scripts) and can take input from and/or output to memory as suggested by Doug Bagley and Randy Harmon (Look at test/html/registry/Execute.htm for an example) - Changed the source that it will compile on aix, spotted by Patrick McAuliffe - Access sys_errlist via perl macro Strerror to avoid errors with redeclaration, thanks for spotting this to Honza, Jirousek - Changed the tab size from 4 to 8 in my editor to be compatible with unix standard - Added warning if dbgLogLink is set and EMBPERL_VIRTLOG not - Change the delimter of metacommand from space to any non alpha char to allow writing [$while(a==b)$] as suggested by Michael D. Dowling - Added config variable EMBPERL_ESCMODE to set inital values of $escmode as suggested by Todd Eigenschink - Added [! ... !]. Does just the same as [- ... -] but will only executed on the first request for that document. This can be used to do one time initialisation and to define subroutines. - Change push_handlers to register_cleanup, so PERL_STACKED_HANDLERS and PREL_CLEANUP aren't necessary anymore, as suggested by Doug MacEachern - If exists, the function CLEANUP of the processed document will be called before variable cleanup, but after the connection to the client is closed - Added a closing in logfile send to the browser, otherwise msie 4 can't handle it - Changed perl constants in perl part form subroutines to "real" constants - Does some rearangeing of code - Fixed a memory leak which has caused Embperl to loose one sv per perl block, when a document is reloaded - Fixed a bug which causes [+... +] within the Textarea tag to be ignored spotted by Todd Eigenschink - Fixed a bug in sorting hidden fields - Fixed an wrong argument to MakeMaker, which was the cause that Embperl couldn't build static, spotted by Belomestnov, Anatolii (and added a decription to the Faq how to link static to mod_perl) - Fixed that the LOG filehandle was not imported in the documents package, so printing to LOG just has gone to nowhere 0.24-beta 13 Jan 1998 - Added the option optRawInput which causes Embperl not to preprocess the source for a perl expression (Only exceptions is that CR will be removed). This option should be set when you writing your code with an ascii editor. If you using a WYSIWYG editor, which insert unwanted html tags in your perl expressions and escapes special charcaters automaticly (i.e. < will occur as < in the source), you should not set this option, and Embperl will automaticly convert the html input back to the perl expression you written. (Thanks to Todd R. Eigenschink for a patch) - $0 is set to filename of html source - Change Current Working Directory to directory of html source - Warning messages now are also logged in logfile at the correct position next to the source line - Perl error and warning messages contains the filename and correct linenumber of the html source - Sourcelines in logfile contain linenumbers - Output via [+ ... +] of undefined values at the end of a dynamic table (which must be there to end the table) do not generate a warning anymore NOTE: If you use them in a expression (such like $a = $arr[$row] or simply inside " ", you will still get a warning) - Open html source in binary mode on Win32 to avoid overhead of crlf -> lf translation. - Use aplog_error for apache_1.3 to avoid senseless os errors written to httpd error log - Removed some uninitializied value messages when running with -w / PerlWarn on spotted by Todd R. Eigenschink - Fixed a bug which has caused nested while loop to exeute incorrect if the condition of the outer one if false 0.23-beta 31 Dec 1997 - Fixed a bug which causes $req_rec to be not defined anymore (Thanks to Todd R. Eigenschink for the hint and debugging) - Fixed a bug in escaping special html char to normal ascii (Thanks to Todd R. Eigenschink for the hint) - Makefile.PL now set the path to your perl binary in embpexec.pl and embpexec.test.pl, so it works regardless where your perl is located (Thanks to Randal Schwarz for the hint) - Added the SSLDisable to the test config when running an httpsd. (Thanks to David Scott for the hint and Ralf S. Engelschall for the Syntax) - Fixed a bug in tag interpreation causing random errors when not compiled for mod_perl 0.22-beta 28 Dec 1997 - Changed include path generated in Makefile.PL so Embperl also compiles with apache_1.3b3 (Thanks to Doug Bagley for the hint) 0.21-beta 25 Dec 1997 - Embperl offline mode now works under win 32 (mod_perl and cgi mode not tested under win 32 yet, but maybe it works too) - Totaly reworked safenamespace and operatormask handling. Works now without memory leak, is fully configurable and does also a p-code caching. If you use it, please look at the documentation, because configuration has changed. - Embperl now sends it's own error document if it detects an error. The page contains all the error messages and if you have the dbgLogLink enabled, all errors are links to the corresponding line in the logfile. (Could be disabled with optDisableEmbperlErrorPage) - Added new Metacommand [$VAR ... $], which can be used to declare variables and apply the strict pragma (same as use strict ; use vars ) - Added debug flag dbgHeadersIn which causes Embperl to log all http headers which are received from the client - Don't change any unknown HTML Escapes (i.e. && has been translated to ? in versions < 0.21) - dbgShowCleanup logs all variables which are automatily undefed at the end of a request (for scalars also the value is shown) - Error messages will also be cached, so that the compiling of the code only takes place once, because errornous perl code, will cause memory leaks in perl itself, if it's compiled on and on. - Optimized the compiling of the embbeded perl code - Changed use Apache::Constants to be conform with new default exports introduced in mod_perl-1.07_01 - Output of hidden metacommand is sorted in the same order as the input from the formfields or sorting order can be supplied as third argument - will override the correspondig http header this avoids netscape from asking the user to reload the document when the content-type differs between the http header and the meta http-equiv This can also be used to set http headers - Fixed a problem that Embperl magicaly variables does not work when the package exists before the first call to Embperl - Fixed a problem that causes a SIGSEGV when retrieving a document, which contains a perl error, a second time from the same child - Fixed a problem that cause Embperl to terminate in offline/cgi-mode when file was not found or access was forbidden - Fixed a problem with the hidden metacommand when arguments supplied with surounding spaces - Fixed a problem that Embperl does not handle metacommand correctly when HTML tags (e.g.
) are embbeded 0.20-beta 15 Nov 97 - Every file is executed in a separate package (don't confuse this with safe namespace) to reduce of unwanted effects for each other - Added configuration directive EMBPERL_PACKAGE which can be used to override the automatic genrated package name - The namespace (package) used by a request is cleanup afterwards. That means that every scalar, hash or array is undef'ed, after the request to make sure nothing is lying arround an will the next request (maybe) make misbehave. This reqire mod_perl with PERL_CLEANUP=1 and PERL_STACKED_HANDLER=1! NOTE: To get persitent variables place them in another namespace i.e. write $persitent::x instead of $x - Added configuration directive EMBPERL_OPTIONS to configure various runtime options. Now only the scalar cleanup can be disabled. - use log_error for writing to apache error log to get timestamp - Escaping inside a tag is change from html escape to url escape i.e. space is translated to + and & is translated to %26 and so on - Escaping can now be turned on and off via $escmode - Concats ENV and cgi_env under mod_perl so the PerlSetEnv can be used instead of SetEnv for configuration. In contrast to SetEnv, PerlSetEnv allows differnet values per directory/virtual host - Added two links to show source-loglines and eval-loglines when dbgLogLink is enabled to have a quick jump to the logfile - Reget pid for every request, so the correct one will be written to the logfile, also when Embperl is loaded at server startup - Check error log in make test, added test for error output - Fixed a bug which causes Embperl to cause a SIGSEGV when an perl syntax error occured - Fixed a bug so that a '>' inside of [+/- ... -/+] is not detected as the end of an html tag (Thanks to Todd R. Eigenschink) 0.19-beta 29 Oct 97 - rewritten the code for the LOG handle. Now the handle LOG is tied so every print/printf is written to embperl.log at the right position. Use this to do logging from your embeded code or modules - Fixed a bug which causes garbage displayed in dynamic tables or make parts of the table lost at all 0.18-beta 25 Oct 97 - Added caching of p-code. Now all perl-code is compiled only once. On the second request the compiled p-code is used. This makes, for example, the table.htm from the test about 4 times faster on the second run then it was in previous versions of Embperl. Also tables and loops are faster in the first request, because the code is only compiled in the first iteration. - , this means that if a value for the select exists in %fdat, the corresponding option is automaticly selected. - Added support for table heading ( tag). If all cells in a row are surounded by / instead of / the row is interpreted as column headings and printed only once. row headings not support yet, but in one of the next versions... - Added support for multipart/formdata to support fileupload. Embperl detects automaticly multipart/formdata and let CGI.pm handle it. The results are also present in @ffld and %fdat like for normal formdata. See CGI.pm for more docs. (Thanks to eigenstr@mixi.net for the idea and material) - Now all the output is kept in memory and the http-header are send when the processing is finish. This gives the ability to set http-header (only under mod_perl) within the page. Also now the Content-Length could be send in the http-header. (Thanks to eigenstr@mixi.net for the idea and material) - Added tests for mod_perl mode and running as cgi-script, if compilation for mod_perl is enabled (Thanks to Doug MacEachern for lots of ideas and code I have borrowed from his mod_perl) - Removed "= true" in MailFormTo which caused a warning and don't declare syserr_list in ep.h on FreeBSD (Thanks to Michael Fuhr for the hints) - Added SYSNOPSIS section to docs to avoid pod2man warning and changed apache/src/regx to apache/src/regex in Makefile.PL (Thanks to Bob Wilkinson) - Splitted C-sources in some more source files - Fix two minor memory leaks. Now the Embperl test suite can run 1000 times and more without makeing the httpd grow! 0.17-beta 30 Aug 97 - Removed some Compiler Warnings (Thanks to Ian Kallen for reporting them) 0.16-beta 29 Aug 97 - Added more restrictive access check when running under mod_perl * Option ExecCGI must be set * must not a directory - Added a little bit more docs about how to view Embperl lofile with your browser - Added declaration for error dependend stuff to compile on solaris, check errno before accessing sys_errlist to avoid SIGSEVs, Fixed another warning from Sun Pro C Compiler (Thanks to Dan Peterson) - Switched I/O to PerlIO if supported by installed Perl version. Should now work with sfio (not tested yet) - Added possibilty to include Embperl commands in all html tags (did not works for body, table and tr tags in previous versions) - Preserve case of HTML tags - Do not interpret unknown html tags anyhow, to handle "<" characters which do not start a html tag better - Do not display the time needed for the request if CLOCKS_PER_SEC not defined (e.g. SunOS - Thanks to Dan Peterson) - Added apache_xx/src/regx to include path, to avoid problems when apache was build with it's own regx library - Show which tags mismatch in error message (table, dir, select etc.) - Fixed a bug which caused "[" character even printed when in a false if path 0.15-beta 11 July 1997 - Added interpretation of SELECT Tag to generate dynamic listboxes from an arrary - Fixed a problem with dynamic lists - Fixed some warnings displayed by the Sun Pro C Compiler (Thanks to Dan Peterson) - Fixed an error message about missing IO::Handle - Changed all // comments to /* */ to be more compatiple with others than gnu-c compiler - Insert a missing return in oputc caused a SIGSEV on Solaris (Thanks to Dan Peterson) - Checked return code of Logfile open, to prevent a SIGSEV when cannot write to logfile and write an errormessage in servers errorlog (Thanks to Dan Peterson) - Errors will also be logged to the servers error log (written to stderr) 0.14-beta 30 Juni 1997 - adding 8192 to EMBPERL_DEBUG and setting EMBPERL_VIRTLOG will add a link to Embperl output, so you can directly view the right part of the logfile with your browser - added the LOG filehandle to print to the embperl logfile - Add the possibility of handling multiple form fields with same name - chars which are result of a perl expression will not be escaped to html if they are prefixed with a backslash - Added support for scanning the parameters of input tag for perl code i.e. [- -] and [+ +] substituions takes place - Replace carridge return in perl expression with space to avoid perl 5.004 error about carridge return - added $req_rec to access the apache server api when running under mod_perl - Fixed a bug in Safe namespace handling causing always ERR: 17 Namespace unknown - Fixed a bug which caused dynamic tables to end, if a if, while etc. is included - Fixed a bug that caused [$cmd$] executed only in the first iteration of while or table - Fixed some bugs in input tag interpretation - Fixed a bug occured when have a input tag with value="" and %ffld="" - Fixed a bug in embpexec.pl that caused the options to be ignored when running offline 0.13-beta April 26 1997 - Move EPENTRY (embperl_init) down to avoid crash when compiled with -DEPDEBUGALL - Add #undefs for stdio function to compile with perl > 5.003 Note: This is a quick hack, and will be changed to use PerlIO in one of the next releases, so we can tie stdout of Embperl - Add pids (to distinguish between muliplite requests) and time to logfile output - Make many functions static and names of externals more unique to avoid conflicts of symbolnames with other modules - If file not found return status 404 instead of 500 - Add Apache::Embperl so the module shows at CPAN also under module/by-module/Apache/ as suggested by Doug MacEachern 0.12-beta not publicly released - The mask has been removed from namespace option so it can be used with safe.pm > 2 - Embperl works with -T / PerlTaintCheck on - Add function MailFormTo to send form contents via email - the dbgSource option displays only one line for better overview - fixed a bug caused perl operator '<' interpreted as html tag in tables or while loop after the first iteration - add ffld array for mod_perl mode to get the order of form fields - removed vsnprintf, since it's not available on all platforms - Correct handling of empty dynamic tables - Fix Bug causes a Segmentaion Fault when first table is empty - Add script for make test - Fixed Error with nested if - Log compilation errors of embedded perl code - Avoid some warnings in Embperl.pm 0.11-beta March 25 1997 - Name changed from Embperl to HTML::Embperl!!!!!!!! - FORM & ENV debug output now available in all modes - Ouput from [+ +] and INPUT fields are escaped (e.g. < is send as < ) - two dimensional tables - bug whiches causes an endless loop when using a \ fixed - fixed escaping special html chars above ascii code 128 - added support for list tags (dir, menu, ol, ul, dl) - added support for textarea tag - fixed some errors 0.10b-beta Jan 23 1997 - fixed some errors 0.10beta Jan 18 1997 - first public beta release