/usr/local/CPAN/perl-lisp/Lisp/Subr/Perl.pm
package Lisp::Subr::Perl;
# Make many perl functions available in the lisp envirionment
use strict;
use vars qw($DEBUG $VERSION);
$VERSION = sprintf("%d.%02d", q$Revision: 1.4 $ =~ /(\d+)\.(\d+)/);
use Lisp::Symbol qw(symbol);
my @code;
# Perl builtins that does take zero arguments
for (qw(time times getlogin getppid fork wait)) {
push(@code, qq(symbol("$_")->function(sub { $_ });\n));
}
# Perl builtins that take one optional argument
for (qw(sin cos rand srand exp log sqrt int hex oct abs ord chr
ucfirst lcfirst uc lc quotemeta caller reset exit
umask chdir chroot readlink rmdir getpgrp
localtime gmtime alarm sleep
require stat length chop chomp defined undef study pos
-r -w -x -o -R -W -X -O -e -z -s -f -d -l -p -S -b -c
-t -u -g -k -u -g -k -T -B -M -A -C
))
{
push(@code, qq(symbol("$_")->function(sub { \@_==0?$_:$_ \$_[0] });\n));
}
print join("", @code) if $DEBUG;
eval join("", @code);
die $@ if $@;
# some additional stuff
symbol("perl-eval")->function(sub { eval $_[0] });
1;