Site Tools


perl_function
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


perl_function [2006/08/29 20:18] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +# $EPIC: perl_function.txt,v 1.3 2006/08/29 18:22:56 sthalik Exp $
 +======Synopsis:======
 +$perl(//perl statement//)
 +
 +======Purpose:======
 +If EPIC was linked with an embedded perl interpreter, the //perl statement//
 +shall be executed by perl.  If EPIC was not linked against perl, then no 
 +action shall take place.
 +
 +As all //perl statement//s resolve to a (perl) scalar value, that (perl)
 +scalar value shall be converted into an ircII string and returned.  This
 +means the return value shall not be "binary data" (have embedded nuls)
 +
 +If the //perl statement// has an error, the result is undefined, but usually
 +an error message is output to the window and the empty string is returned.
 +
 +Please remember that all function call arguments are subject to ircII 
 +expansion BEFORE the function call occurs.  You must ensure that any chars
 +that are special to both ircII and perl are quoted so ircII doesn't try
 +to honor them.  Because //perl statement//s can be surrounded by curly
 +braces, it is best practice to use them.  (See examples)
 +
 +You can call back to EPIC from perl.  See [[perl command]] for details.
 +
 +======Practical:======
 +$perl() is useful for loading perl scripts and modules, defining
 +simple perl functions, retrieving variables from within perlspace and
 +other general maintenance of the perl environment.
 +
 +======Returns:======
 +The scalar value of the perl expression. If any other data type is
 +returned, it will be converted to a scalar under perls rules.
 +
 +======Examples:======
 +<file>
 +$perl(do script.pl)  Loads and runs script.pl.
 +                     See the perl documentation for the "do" function.
 +$perl(use Time::localtime)
 +                     Loads the standard perl module Time::localtime.
 +$perl(localtime->yday())
 +                     Returns the day of the year from module Time::localtime.
 +$perl(sub foo {reverse(wantarray ? @_ : "@_")})
 +                     Defines a perl subroutine which returns the reverse of
 +                     its input, whether it is called in scalar or list
 +                     context.
 +$perl(keys %ENV)     Returns the number of variables in your environment.
 +                     This is because keys returns a list, and $perl()
 +                     returns the scalar value of the expression, which is
 +                     the number of elements in the returned list.
 +$perl(@keys=keys %ENV; "@keys")
 +                     Since perl lists are scalar when quoted this way, the
 +                     names of all environment variables will be returned.
 +$perl(shift @array)  Returns the shifted variable.
 +$perl(push @array,"nick!user@host")
 +                     This will fail, because perl will try to insert a perl
 +                     array @host into the string.  Furthermore, if any of
 +                     nick, user or host contains the quote character used to
 +                     quote the string, the expression will also fail.  The
 +                     correct way to do this is to define a subroutine which
 +                     pushes its arguments onto @array and call it with
 +                     $perlcall(sub nick!user@host).
 +$perl($scalar)       Returns the value of the expression in the epic (not
 +                     perl) variable $scalar.
 +$perl($$scalar)      Returns the value of the perl scalar variable $scalar.
 +$perl({$scalar})     Returns the value of the perl scalar variable $scalar.
 +$perl(`ls`)          How to use perl to get the output of commands.
 +$perl(1+2*3)         How to use perl to do math.
 +$perl("$*" =~ /foo.txt/i)
 +      How to use perl to do regular expression matching on
 +      ircII variables.  Make sure to use double quotes!
 +</file>
 +
 +======History:======
 +
  
perl_function.txt · Last modified: 2006/08/29 20:18 by 127.0.0.1