sub 内部で eval ブロック内から直接 return できない

すいません,基礎ができていませんでした。

sub foobar {
  my $arg = shift;
  eval {
    return 'not defined'
      unless defined $arg;
  };
  return 'defined';
}

print foobar();  # 'defined' is printed.

eval() 内の return は eval 節自体の評価値として返す,という意味しかもたないのですね,あらためて perldoc -f eval を読みました。お気軽に例外処理としてしか考えてなかったのではまりました。