diff options
Diffstat (limited to 'src/perl/irssi-core.pl')
-rw-r--r-- | src/perl/irssi-core.pl | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/perl/irssi-core.pl b/src/perl/irssi-core.pl new file mode 100644 index 00000000..94517242 --- /dev/null +++ b/src/perl/irssi-core.pl @@ -0,0 +1,44 @@ +# NOTE: this is printed through printf()-like function, +# so no extra percent characters. + +# %%s can be used once, it contains the +# use Irssi; use Irssi::Irc; etc.. +package Irssi::Core; + +use Symbol qw(delete_package); +use strict; + +sub destroy { + my $package = "Irssi::Script::".$_[0]; + delete_package($package); +} + +sub eval_data { + my ($data, $id) = @_; + destroy($id); + + my $package = "Irssi::Script::$id"; + my $eval = qq{package $package; %s sub handler { $data; }}; + { + # hide our variables within this block + my ($filename, $package, $data); + eval $eval; + } + die $@ if $@; + + eval {$package->handler;}; + die $@ if $@; +} + +sub eval_file { + my ($filename, $id) = @_; + + local *FH; + open FH, $filename or die "File not found: $filename"; + local($/) = undef; + my $data = <FH>; + close FH; + $/ = '\n'; + + eval_data($data, id); +} |