The _resolve_path() method fails to handle a file or directory of '0'.
If the cwd is /foo/bar and we attempt _resolve_path( '0' ), the result is
'/foo/bar' instead of '/foo/bar/0' as expected.
The fix is to change
my $path = shift || '';
in _resolve_path into
my $path = shift;
$path = '' unless defined $path;
This could be resolved in 5.10 or later, with
my $path = shift // '';