The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package IO::All::Dir;
use IO::All::Base;
extends 'IO::All::Filesys';

# Upgrade from IO::All to IO::All::Dir
use constant upgrade_methods => [qw(dir mkdir)];

sub can_upgrade {
    my ($self, $object) = @_;
    my $location = $object->location;
    return if
        not defined $location or
        not length $location;
    -d $location;
}

sub dir {
    my $self = shift;
    $self->name(shift) if @_;
    return $self;
}

sub mkdir {
    my ($self) = @_;
    my $name = $self->name;
    my $strict = $self->{_strict};
    if (-d $name) {
        return unless $strict;
        $self->throw("Can't mkdir $name. Directory already exists.");
    }
    CORE::mkdir($name) or $self->throw("mkdir $name failed: $!");
}

1;