diff options
author | Tom Feist <shabble@metavore.org> | 2010-10-10 22:11:52 +0000 |
---|---|---|
committer | Tom Feist <shabble@metavore.org> | 2010-10-10 22:11:52 +0000 |
commit | 745b2901e2f635d6a57cbe3e40695a6fe751f97b (patch) | |
tree | 9f860e07ceb4182d1a6e19553275060fd401ca67 /feature-tests | |
parent | added a brief proof-of-concept for loading/reloading additional functions on the (diff) | |
download | irssi-scripts-745b2901e2f635d6a57cbe3e40695a6fe751f97b.tar.gz irssi-scripts-745b2901e2f635d6a57cbe3e40695a6fe751f97b.zip |
tidied up loading code, added demo of calling func in outer scope
Diffstat (limited to '')
-rw-r--r-- | feature-tests/subscript.pl | 26 | ||||
-rw-r--r-- | feature-tests/test.sub | 3 |
2 files changed, 25 insertions, 4 deletions
diff --git a/feature-tests/subscript.pl b/feature-tests/subscript.pl index 74a5afe..8550409 100644 --- a/feature-tests/subscript.pl +++ b/feature-tests/subscript.pl @@ -19,6 +19,10 @@ my $functions = {}; init(); +sub _input { + return int rand 1000; +} + sub load { my $file = shift; my $funcs; @@ -26,16 +30,32 @@ sub load { print "Loading from file: $file"; $funcs = do $file; } + if (not defined $funcs) { + if ($@) { + print "failed to parse $file: $@"; - return unless ref $funcs eq 'HASH'; - print "Got hashref from file"; + } elsif ($!) { + print "failed to read $file: $!"; + + } + return; + } + my $ref = ref $funcs; + if ($ref ne 'HASH') { + print "$file didn't return a hashref: ", defined $ref ? $ref : 'undef'; + return; + } foreach my $name (keys %$funcs) { my $func = $funcs->{$name}; + if (exists $functions->{$name}) { + print "Redefining function $name"; + } else { + print "adding function: $name"; + } $functions->{$name} = $func; } - $functions = $funcs; print "Loaded " . scalar(keys(%$funcs)) . " functions"; } diff --git a/feature-tests/test.sub b/feature-tests/test.sub index 6a24879..350e89d 100644 --- a/feature-tests/test.sub +++ b/feature-tests/test.sub @@ -1,6 +1,7 @@ { 'moo' => sub { print "Moo" }, - 'hello' => sub { print join(", ", @_) } + 'hello' => sub { print join(", ", @_) }, + 'inp' => sub { print "input is : ", _input(); }, }; |