CGI-WebOut

 view release on metacpan or  search on metacpan

WebOut.pm  view on Meta::CPAN



# Ïåðåõâàò âûõîäíîãî ïîòîêà. Èñïîëüçîâàíèå:
# $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)
# Óñòàíàâëèâàåò çàãîëîâîê îòâåòà.

WebOut.pm  view on Meta::CPAN

  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 )