CGI-WebOut
view release on metacpan or search on metacpan
# Ïåðåõâàò âûõîäíîãî ïîòîêà. Èñïîëüçîâàíèå:
# $grabbed = grab {
# print 'Hello!'
# } catch {
# die "An error occurred while grabbing the output: $@";
# };
# èëè òî æå, íî áåç catch:
# $grabbed = grab { print 'Hello!' };
sub grab(&@)
{ my ($func, $catch)=@_;
my $Buf = CGI::WebOut->new;
$@ = undef; eval { &$func() };
if ($@ && $catch) { chomp($@); local $_ = $@; &$catch; }
return $Buf->buf;
}
# static Header($header)
# Óñòàíàâëèâàåò çàãîëîâîê îòâåòà.
local @Warns = @Errors>@SvErrors? @Errors[@SvErrors..$#Errors] : ();
# Âîññòàíàâëèâàåì ñîîáùåíèÿ îá îøèáêàõ
@Errors = @SvErrors;
# Çàïóñêàåì îáðàáîò÷èêè â ïîðÿäêå èõ ïîÿâëåíèÿ
map { &$_() } @Hand;
# Âîçâðàùàåì çíà÷åíèå, êîòîðîå âåðíóë try-áëîê
return wantarray? @Result: $Result[0];
}
# Âîçâðàùàåò ôóíêöèþ-çàìûêàíèå, êîòîðàÿ âûçûâàåò òåëî catch-áëîêà.
sub catch(&;@)
{ my ($body, @Hand)=@_;
return (sub { if($@) { chomp($@); local $_=$@; &$body($_) } }, @Hand);
}
# Âîçâðàùàåò ôóíêöèþ-çàìûêàíèå, êîòîðàÿ âûçûâàåò òåëî warnings-áëîêà.
sub warnings(&;@)
{ my ($body,@Hand)=@_;
return (sub { &$body(@Warns) }, @Hand);
}
# Âûáðàñûâàåò èñêëþ÷åíèå.
sub throw($) {
die(ref($_[0])? $_[0] : "$_[0]\n")
}
( run in 1.241 second using v1.01-cache-2.11-cpan-49f99fa48dc )