Beta Shell
v2.0 ยท web2.us.cloudlogin.co
[FM]
[CMD]
[PHP]
[DB]
[INFO]
[SEC]
File Manager
~
/
usr
/
share
/
doc
/
perl-Scope-Upper
/
samples
Upload
5 items
Name
Size
Perms
Modified
Actions
[ .. / .. ]
bench_uplevel.pl
1.46 KB
-rw-r--r--
2019-10-25 13:56:24
Edit
Del
tag.pl
1.25 KB
-rw-r--r--
2019-10-25 13:56:24
Edit
Del
try.pl
806 B
-rw-r--r--
2019-10-25 13:56:24
Edit
Del
Editing: try.pl
(806 B)
Path: /usr/share/doc/perl-Scope-Upper/samples/try.pl
Back
#!/usr/bin/perl use strict; use warnings; use blib; use Scope::Upper qw<unwind want_at :words>; sub try (&) { my @result = shift->(); my $cx = SUB UP; # Point to the sub above this one unwind +(want_at($cx) ? @result : scalar @result) => $cx; } sub zap { try { my @things = qw<a b c>; return @things; # returns to try() and then outside zap() }; print "NOT REACHED\n"; } my @stuff = zap(); # @stuff contains qw<a b c> my $stuff = zap(); # $stuff contains 3 print "zap() returns @stuff in list context and $stuff in scalar context\n"; { package Uplevel; use Scope::Upper qw<uplevel CALLER>; sub target { faker(@_); } sub faker { uplevel { my $sub = (caller 0)[3]; print "$_[0] from $sub()\n"; } @_ => CALLER(1); } target('hello'); # "hello from Uplevel::target()" }