X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Fperl%2Firssi-core.pl;fp=apps%2Firssi%2Fsrc%2Fperl%2Firssi-core.pl;h=38265a80176520378ab334834906d30d64005e23;hb=18d69a0a1fec438e241bb4f431506ed59a34066b;hp=11aa0f6f50275cf51ec50629c6927dacb8ae7a80;hpb=f7be6adec0248118cddde9b04522c13cd90568cd;p=silc.git diff --git a/apps/irssi/src/perl/irssi-core.pl b/apps/irssi/src/perl/irssi-core.pl index 11aa0f6f..38265a80 100644 --- a/apps/irssi/src/perl/irssi-core.pl +++ b/apps/irssi/src/perl/irssi-core.pl @@ -8,6 +8,12 @@ package Irssi::Core; use Symbol; +$SIG{__WARN__} = sub { + my @msg = @_; + s/%%/%%%%/g for @msg; + print @msg; +}; + sub is_static { return %d; } @@ -18,33 +24,27 @@ sub destroy { } sub eval_data { - my ($data, $id) = @_; - destroy("Irssi::Script::$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 $@; - - my $ret; - eval { $ret = $package->handler; }; - die $@ if $@; - return $ret; + my $ret = eval do { + my ($data, $id) = @_; + destroy("Irssi::Script::$id"); + my $code = qq{package Irssi::Script::$id; %s $data}; + $code + }; + $@ and die $@; + $ret } sub eval_file { my ($filename, $id) = @_; - local *FH; - open FH, $filename or die "File not found: $filename"; - local($/) = undef; - my $data = ; - close FH; - local($/) = "\n"; + open my $fh, '<', $filename or die "Can't open $filename: $!"; + my $data = do {local $/; <$fh>}; + close $fh; + + $filename =~ s/(["\\])/\\$1/g; + $filename =~ s/\n/\\n/g; + + $data = qq{\n#line 1 "$filename"\n$data}; eval_data($data, $id); }