eval

eval and $@.

eval catches. $@ holds the error.

Goal

Catch a die and say the message.

use strict;
use warnings;
use feature 'say';

eval { die "empty till" };
say $@ if $@;
use strict;
use warnings;
use feature 'say';

eval { my $n = 12 / 4; say $n };
say $@ || "ok";
use strict;
use warnings;
use feature 'say';

sub need_city {
  my ($city) = @_;
  die "city required" if !$city;
  return $city;
}
say need_city("Nairobi");
eval { need_city("") };
say "caught" if $@;
use strict;
use warnings;
use feature 'say';

eval { 1 / 0 };
say $@ ? "caught" : "ok";