class IO::Spec::Win32 is IO::Spec::Unix { }

An object of this type is available via the variable $*SPEC if the Raku interpreter is running on a Windows-like platform.

About this class and its related classes also see IO::Spec.

Methods §

method basename §

Defined as:

method basename(Str:D $path --> Str:D)

Takes a path as a string and returns a possibly-empty portion after the last slash or backslash:

IO::Spec::Win32.basename("foo/bar/".raku.say# OUTPUT: «""␤» 
IO::Spec::Win32.basename("foo/bar\\").raku.say# OUTPUT: «""␤» 
IO::Spec::Win32.basename("foo/bar/.").raku.say# OUTPUT: «"."␤» 
IO::Spec::Win32.basename("foo/bar")  .raku.say# OUTPUT: «"bar"␤»

method canonpath §

Defined as:

method canonpath(Str() $path:$parent --> Str:D)

Returns a string that is a canonical representation of $path. If :$parent is set to true, will also clean up references to parent directories. NOTE: the routine does not access the filesystem.

IO::Spec::Win32.canonpath("C:/foo//../bar/../ber").say;
# OUTPUT: «C:\foo\..\bar\..\ber␤» 
 
IO::Spec::Win32.canonpath("C:/foo///./../bar/../ber").say;
# OUTPUT: «C:\foo\..\bar\..\ber␤» 
 
IO::Spec::Win32.canonpath("C:/foo///./../bar/../ber":parent).say;
# OUTPUT: «C:\ber␤»

method catdir §

Defined as:

method catdir (*@parts --> Str:D)

Concatenates multiple path fragments and returns the canonical representation of the resultant path as a string. The @parts are Str objects and are allowed to contain path separators.

IO::Spec::Win32.catdir(<foo/bar ber raku>).say;
# OUTPUT: «foo\bar\ber\raku␤»

method catfile §

Alias for catdir.

method catpath §

Defined as:

method catpath (Str:D $volumeStr:D $dirStr:D $file --> Str:D)

Concatenates a path from given volume, a chain of directories, and file. An empty string can be given for any of the three arguments. No attempt to make the path canonical is made. Use canonpath for that purpose.

IO::Spec::Win32.catpath('C:''/some/dir''foo.txt').say;
# OUTPUT: «C:/some/dir\foo.txt␤» 
 
IO::Spec::Win32.catpath('C:''/some/dir''').say;
# OUTPUT: «C:/some/dir␤» 
 
IO::Spec::Win32.catpath('''/some/dir''foo.txt').say;
# OUTPUT: «/some/dir\foo.txt␤» 
 
IO::Spec::Win32.catpath('E:''''foo.txt').say;
# OUTPUT: «E:foo.txt␤»

method devnull §

Defined as:

method devnull(--> Str:D)

Returns the string "nul" representing the "Null device":

$*SPEC.devnull.IO.spurt: "foo bar baz";

method dir-sep §

Defined as:

method dir-sep(--> Str:D)

Returns the string 「\」 representing canonical directory separator character.

IO::Spec::Win32.dir-sep.say# OUTPUT: «\␤» 

method is-absolute §

Defined as:

method is-absolute(Str:D $path --> Bool:D)

Returns True if the $path starts with a slash ("/") or backslash ("\"), even if they have combining character on them, optionally preceded by a volume:

say IO::Spec::Win32.is-absolute: "/foo";        # OUTPUT: «True␤» 
say IO::Spec::Win32.is-absolute: "/\x[308]foo"# OUTPUT: «True␤» 
say IO::Spec::Win32.is-absolute: C:\foo;      # OUTPUT: «True␤» 
say IO::Spec::Win32.is-absolute: "bar";         # OUTPUT: «False␤»

method join §

Defined as:

method join (Str:D $volumeStr:D $dirStr:D $file --> Str:D)

Similar to catpath, takes two path fragments and concatenates them, adding or removing a path separator, if necessary, except it will return just $file if both $dir and $file are string '/' or if $dir is the string '.'. The first argument is ignored (it exists to maintain consistent interface with other IO::Spec types for systems that have volumes).

IO::Spec::Win32.join('C:''/some/dir''foo.txt').say;
# OUTPUT: «C:/some/dir\and/more␤» 
 
IO::Spec::Win32.join('C:''.''foo.txt').say;
# OUTPUT: «C:foo.txt␤» 
 
IO::Spec::Win32.join('C:'\'/').say;
# OUTPUT: «C:\␤» 
 
IO::Spec::Win32.join('//server/share'\'/').say;
# OUTPUT: «//server/share␤» 
 
IO::Spec::Win32.join('E:''''foo.txt').say;
# OUTPUT: «E:foo.txt␤»

method path §

Defined as:

method path(--> Seq:D)

Splits the value of %*ENV<PATH> (or %*ENV<Path> if the former is not set) on semicolons (";") and returns a Seq with each of the resultant parts, always adding element "." to the head. Removes all double quotes (") it finds.

%*ENV<PATH> = 'foo;"bar"/"ber"';
IO::Spec::Win32.path.raku.say# OUTPUT: «(".", "foo", "bar/ber").Seq␤»

method rel2abs §

Defined as:

method rel2abs(Str() $path$base = $*CWD --> Str:D)

Returns a string representing $path converted to absolute path, based at $base, which defaults to $*CWD. If $base is not an absolute path, it will be made absolute relative to $*CWD, unless $*CWD and $base are the same.

say $*CWD;                                   # OUTPUT: «"C:\Users\camelia".IO␤» 
 
say IO::Spec::Win32.rel2abs: 'foo';          # OUTPUT: «C:\Users\camelia\foo␤» 
say IO::Spec::Win32.rel2abs: './';           # OUTPUT: «C:\Users\camelia␤» 
say IO::Spec::Win32.rel2abs: 'foo/../../';   # OUTPUT: «C:\Users\camelia\foo\..\..␤» 
say IO::Spec::Win32.rel2abs: '/foo/';        # OUTPUT: «C:\foo␤» 
 
say IO::Spec::Win32.rel2abs: 'foo''bar';   # OUTPUT: «C:\Users\camelia\bar\foo␤» 
say IO::Spec::Win32.rel2abs: './''/bar';   # OUTPUT: «\bar␤» 
say IO::Spec::Win32.rel2abs: '/foo/''bar'# OUTPUT: «C:\foo␤» 
 
say IO::Spec::Win32.rel2abs: 'foo/../../''bar';
# OUTPUT: «C:\Users\camelia\bar\foo\..\..␤» 

method rootdir §

Defined as:

method rootdir(--> Str:D)

Returns string 「\」, representing root directory.

method split §

Defined as:

method split(IO::Spec::Win32: Cool:D $path)

Creates a IO::Path::Parts for $path.

IO::Spec::Win32.split('C:/foo/bar.txt').raku.say;
# OUTPUT: «IO::Path::Parts.new("C:","/foo","bar.txt")␤» 
 
IO::Spec::Win32.split('/foo/').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","foo")␤» 
 
IO::Spec::Win32.split('///').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","\\")␤» 
 
IO::Spec::Win32.split('./').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Win32.split('.').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Win32.split('').raku.say;
# OUTPUT: «IO::Path::Parts.new("","","")␤» 

Note: Before Rakudo version 2020.06 this method split the given $path into "volume", "dirname", and "basename" and returned the result as a List of three Pairs, in that order.

method splitdir §

Defined as:

method splitdir(Cool:D $path --> List:D)

Splits the given $path on slashes and backslashes.

IO::Spec::Win32.splitdir('C:\foo/bar.txt').raku.say;
# OUTPUT: «("C:", "foo", "bar.txt")␤» 
 
IO::Spec::Win32.splitdir('/foo/').raku.say;
# OUTPUT: «("", "foo", "")␤» 
 
IO::Spec::Win32.splitdir('///').raku.say;
# OUTPUT: «("", "", "", "")␤» 
 
IO::Spec::Win32.splitdir('./').raku.say;
# OUTPUT: «(".", "")␤» 
 
IO::Spec::Win32.splitdir('.').raku.say;
# OUTPUT: «(".",)␤» 
 
IO::Spec::Win32.splitdir('').raku.say;
# OUTPUT: «("",)␤» 

method splitpath §

Defined as:

method splitpath(Cool:D $path:$nofile --> List:D)

Splits the given $path into a list of 3 strings: volume, dirname, and file. The volume is always an empty string, returned for API compatibility with other IO::Spec types. If :$nofile named argument is set to True, the content of the file string is undefined and should be ignored; this is a means to get a performance boost, as implementations may use faster code path when file is not needed.

IO::Spec::Win32.splitpath('C:\foo/bar.txt').raku.say;
# OUTPUT: «("C:", "\\foo/", "bar.txt")␤» 
 
IO::Spec::Win32.splitpath('C:\foo/bar.txt':nofile).raku.say;
# OUTPUT: «("C:", "\\foo/bar.txt", "")␤» 
 
IO::Spec::Win32.splitpath('/foo/').raku.say;
# OUTPUT: «("", "/foo/", "")␤» 
 
IO::Spec::Win32.splitpath('/foo/':nofile).raku.say;
# OUTPUT: «("", "/foo/", "")␤» 
 
IO::Spec::Win32.splitpath('///').raku.say;
# OUTPUT: «("", "///", "")␤» 
 
IO::Spec::Win32.splitpath('./').raku.say;
# OUTPUT: «("", "./", "")␤» 
 
IO::Spec::Win32.splitpath('.').raku.say;
# OUTPUT: «("", "", ".")␤» 
 
IO::Spec::Win32.splitpath('').raku.say;
# OUTPUT: «("", "", "")␤» 

method tmpdir §

Defined as:

method tmpdir(--> IO::Path:D)

Attempts to locate a system's temporary directory by checking several typical directories and environmental variables. Uses current directory if no suitable directories are found.

Type Graph §

Type relations for IO::Spec::Win32
perl6-type-graph IO::Spec::Win32 IO::Spec::Win32 IO::Spec::Unix IO::Spec::Unix IO::Spec::Win32->IO::Spec::Unix Mu Mu Any Any Any->Mu IO::Spec IO::Spec IO::Spec->Any IO::Spec::Unix->IO::Spec

Expand above chart

Routines supplied by class IO::Spec::Unix §

IO::Spec::Win32 inherits from class IO::Spec::Unix, which provides the following routines:

(IO::Spec::Unix) method abs2rel §

Defined as:

method abs2rel(IO::Path:D $pathIO::Path:D $base = $*CWD --> Str:D)

Returns a string that represents $path, but relative to $base path. Both $path and $base may be relative paths. $base defaults to $*CWD.

(IO::Spec::Unix) method basename §

Defined as:

method basename(Str:D $path --> Str:D)

Takes a path as a string and returns a possibly-empty portion after the last slash:

IO::Spec::Unix.basename("foo/bar/".raku.say# OUTPUT: «""␤» 
IO::Spec::Unix.basename("foo/bar/.").raku.say# OUTPUT: «"."␤» 
IO::Spec::Unix.basename("foo/bar")  .raku.say# OUTPUT: «"bar"␤»

(IO::Spec::Unix) method canonpath §

Defined as:

method canonpath(Str() $path:$parent --> Str:D)

Returns a string that is a canonical representation of $path. If :$parent is set to true, will also clean up references to parent directories. NOTE: the routine does not access the filesystem, so no symlinks are followed.

IO::Spec::Unix.canonpath("foo//../bar/../ber").say;
# OUTPUT: «foo/../bar/../ber␤» 
 
IO::Spec::Unix.canonpath("foo///./../bar/../ber").say;
# OUTPUT: «foo/../bar/../ber␤» 
 
IO::Spec::Unix.canonpath("foo///./../bar/../ber":parent).say;
# OUTPUT: «ber␤»

(IO::Spec::Unix) method catdir §

Defined as:

method catdir (*@parts --> Str:D)

Concatenates multiple path fragments and returns the canonical representation of the resultant path as a string. The @parts are Str objects and are allowed to contain path separators.

IO::Spec::Unix.catdir(<foo/bar ber raku>).say# OUTPUT: «foo/bar/ber/raku␤»

(IO::Spec::Unix) method catfile §

Alias for catdir.

(IO::Spec::Unix) method catpath §

Defined as:

method catpath ($Str:D $part1Str:D $part2 --> Str:D)

Takes two path fragments and concatenates them, adding or removing a path separator, if necessary. The first argument is ignored (it exists to maintain consistent interface with other IO::Spec types for systems that have volumes).

IO::Spec::Unix.catpath($'some/dir''and/more').say;
# OUTPUT: «some/dir/and/more␤»

(IO::Spec::Unix) method curdir §

Defined as:

method curdir()

Returns a string representing the current directory:

say '.' eq $*SPEC.curdir# OUTPUT: «True␤»

(IO::Spec::Unix) method curupdir §

Defined as:

method curupdir()

Returns a Block taking an argument. This block returns True if its argument is neither the string representing the current directory nor the string representing the directory one up from the current one. It returns False otherwise. This block is intended to be used with smartmatching.

say $*SPEC.curupdir;
# OUTPUT: «-> str $dir { #`(Block|65335808) ... }␤» 
 
my @dirs = <. foo .. bar>;
say @dirs.grep: { $_ ~~ $*SPEC.curupdir };
# OUTPUT: «(foo bar)␤» 

Neither foo nor bar are equal to the representation of the current or parent directory, that is why they are returned by grep.

Note: Before Rakudo version 2020.06 a none Junction was returned instead of a Block.

(IO::Spec::Unix) method devnull §

Defined as:

method devnull(--> Str:D)

Returns the string "/dev/null" representing the "Null device":

$*SPEC.devnull.IO.spurt: "foo bar baz";

(IO::Spec::Unix) method dir-sep §

Defined as:

method dir-sep(--> Str:D)

Returns the string "/" representing canonical directory separator character.

IO::Spec::Unix.dir-sep.say# OUTPUT: «/␤» 

(IO::Spec::Unix) method extension §

NOTE: Most users would want to use the higher-level routine IO::Path.extension instead of this lower-level version.

Defined as:

method extension(Str:D $path --> Str:D)

Takes a string representing a base name and returns the characters after the last dot ("."), or empty string if no dots are present. The routine makes no attempt to detect path separators and will return everything after the last dot.

$*SPEC.extension('foo.'      ).raku.say;  # OUTPUT: «""␤» 
$*SPEC.extension('foo.txt'   ).raku.say;  # OUTPUT: «"txt"␤» 
$*SPEC.extension('foo.tar.gz').raku.say;  # OUTPUT: «"gz"␤» 
$*SPEC.extension('foo'       ).raku.say;  # OUTPUT: «""␤» 
$*SPEC.extension('bar.foo/foo').raku.say# OUTPUT: «"foo/foo"␤»

(IO::Spec::Unix) method is-absolute §

Defined as:

method is-absolute(Str:D $path --> Bool:D)

Returns True if the $path starts with a slash ("/"), even if it has combining character on it:

say IO::Spec::Unix.is-absolute: "/foo";        # OUTPUT: «True␤» 
say IO::Spec::Unix.is-absolute: "/\x[308]foo"# OUTPUT: «True␤» 
say IO::Spec::Unix.is-absolute: "bar";         # OUTPUT: «False␤»

(IO::Spec::Unix) method join §

Defined as:

method join ($Str:D $dirStr:D $file --> Str:D)

Similar to catpath, takes two path fragments and concatenates them, adding or removing a path separator, if necessary, except it will return just $file if both $dir and $file are string '/' or if $dir is the string '.'. The first argument is ignored (it exists to maintain consistent interface with other IO::Spec types for systems that have volumes).

IO::Spec::Unix.join($'foo''bar').say# OUTPUT: «foo/bar␤» 
IO::Spec::Unix.join($'/''/').say;     # OUTPUT: «/␤» 
IO::Spec::Unix.join($'.''foo').say;   # OUTPUT: «foo␤» 
say $*SPEC.join(True,".","/foo");         # OUTPUT: «/foo␤»

(IO::Spec::Unix) method path §

Defined as:

method path(--> Seq:D)

Splits the value of %*ENV<PATH> on colons (":"), replaces empty parts with ".", and returns a Seq with each of the resultant parts. Returns an empty Seq if %*ENV<PATH> is not set or is an empty string.

%*ENV<PATH> = 'foo:bar/ber::foo:';
IO::Spec::Unix.path.raku.say;
# OUTPUT: «("foo", "bar/ber", ".", "foo", ".").Seq␤»

(IO::Spec::Unix) method rel2abs §

Defined as:

method rel2abs(Str() $path$base = $*CWD --> Str:D)

Returns a string representing $path converted to absolute path, based at $base, which defaults to $*CWD. If $base is not an absolute path, it will be made absolute relative to $*CWD, unless $*CWD and $base are the same.

say $*CWD;                                  # OUTPUT: «"/home/camelia".IO␤» 
 
say IO::Spec::Unix.rel2abs: 'foo';          # OUTPUT: «/home/camelia/foo␤» 
say IO::Spec::Unix.rel2abs: './';           # OUTPUT: «/home/camelia␤» 
say IO::Spec::Unix.rel2abs: 'foo/../../';   # OUTPUT: «/home/camelia/foo/../..␤» 
say IO::Spec::Unix.rel2abs: '/foo/';        # OUTPUT: «/foo␤» 
 
say IO::Spec::Unix.rel2abs: 'foo''bar';   # OUTPUT: «/home/camelia/bar/foo␤» 
say IO::Spec::Unix.rel2abs: './''/bar';   # OUTPUT: «/bar␤» 
say IO::Spec::Unix.rel2abs: '/foo/''bar'# OUTPUT: «/foo␤» 
 
say IO::Spec::Unix.rel2abs: 'foo/../../''bar';
# OUTPUT: «/home/camelia/bar/foo/../..␤» 

(IO::Spec::Unix) method rootdir §

Defined as:

method rootdir(--> Str:D)

Returns string '/', representing root directory.

(IO::Spec::Unix) method split §

Defined as:

method split(IO::Spec::Unix: Cool:D $path)

Creates a IO::Path::Parts for $path, with an empty string as its volume attribute's value.

IO::Spec::Unix.split('C:/foo/bar.txt').raku.say;
# OUTPUT: «IO::Path::Parts.new("","C:/foo","bar.txt")␤» 
 
IO::Spec::Unix.split('/foo/').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","foo")␤» 
 
IO::Spec::Unix.split('///').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","/")␤» 
 
IO::Spec::Unix.split('./').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Unix.split('.').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Unix.split('').raku.say;
# OUTPUT: «IO::Path::Parts.new("","","")␤» 

Note: Before Rakudo version 2020.06 this method split the given $path into "volume", "dirname", and "basename" and returned the result as a List of three Pairs, in that order.

(IO::Spec::Unix) method splitdir §

Defined as:

method splitdir(Cool:D $path --> List:D)

Splits the given $path on slashes.

IO::Spec::Unix.splitdir('C:\foo/bar.txt').raku.say;
# OUTPUT: «("C:\\foo", "bar.txt")␤» 
 
IO::Spec::Unix.splitdir('/foo/').raku.say;
# OUTPUT: «("", "foo", "")␤» 
 
IO::Spec::Unix.splitdir('///').raku.say;
# OUTPUT: «("", "", "", "")␤» 
 
IO::Spec::Unix.splitdir('./').raku.say;
# OUTPUT: «(".", "")␤» 
 
IO::Spec::Unix.splitdir('.').raku.say;
# OUTPUT: «(".",)␤» 
 
IO::Spec::Unix.splitdir('').raku.say;
# OUTPUT: «("",)␤» 

(IO::Spec::Unix) method splitpath §

Defined as:

method splitpath(Cool:D $path:$nofile --> List:D)

Splits the given $path into a list of 3 strings: volume, dirname, and file. The volume is always an empty string, returned for API compatibility with other IO::Spec types. If :$nofile named argument is set to True, the content of the file string is undefined and should be ignored; this is a means to get a performance boost, as implementations may use faster code path when file is not needed.

IO::Spec::Unix.splitpath('C:\foo/bar.txt').raku.say;
# OUTPUT: «("", "C:\\foo/", "bar.txt")␤» 
 
IO::Spec::Unix.splitpath('C:\foo/bar.txt':nofile).raku.say;
# OUTPUT: «("", "C:\\foo/bar.txt", "")␤» 
 
IO::Spec::Unix.splitpath('/foo/').raku.say;
# OUTPUT: «("", "/foo/", "")␤» 
 
IO::Spec::Unix.splitpath('/foo/':nofile).raku.say;
# OUTPUT: «("", "/foo/", "")␤» 
 
IO::Spec::Unix.splitpath('///').raku.say;
# OUTPUT: «("", "///", "")␤» 
 
IO::Spec::Unix.splitpath('./').raku.say;
# OUTPUT: «("", "./", "")␤» 
 
IO::Spec::Unix.splitpath('.').raku.say;
# OUTPUT: «("", "", ".")␤» 
 
IO::Spec::Unix.splitpath('').raku.say;
# OUTPUT: «("", "", "")␤» 

(IO::Spec::Unix) method tmpdir §

Defined as:

method tmpdir(--> IO::Path:D)

Attempts to locate a system's temporary directory by checking several typical directories and environmental variables. Uses current directory if no suitable directories are found.

(IO::Spec::Unix) method updir §

Defined as:

method updir()

Returns a string representing the directory one up from current:

say '..' eq $*SPEC.updir# OUTPUT: «True␤»
Generated from

Generated from Type/IO/Spec/Win32.pod6