Different Operating Systems use different characters as their path separator when specifying directory and file paths:
foo/bar/baz # *nix uses a / foo\bar\baz # Win32 uses a \ foo:bar:baz # Mac OS 9 uses a : foo/bar/baz # Mac OS X uses a / (usually!)
In Perl you can generally just use a / as your path separator (except on Mac OS 9, thanks Hanamaki). Why? Because Perl will automagically convert the / to the correct path separator for the system it is running on! This means that coding Windows paths like this
$path = "\\foo\\bar\\baz";
is not required. You can just use this:
$path = "/foo/bar/baz";
and things will be fine. In fact using \\ can be problematic, but you probably already know that :-)
If you want to display the expected system delimiter to a user (ie hide the fact that you are using / internally) you can just do something like this:
my $perl_path = '/foo/bar/baz'; (my $win_path = $perl_path) =~ tr!/!\\!; print "Perl still sees: $perl_path\n"; print "But we can print: $win_path\n";
If you need to do lots of conversions just write a sub like this:
So there you have it. Paths in Perl. By using a / you make it much easier to port your code to another system. For truly portable methods look into the File::Spec module (part of the standard distro) and perlman:perlport. Thanks to wog and Hanamaki for this suggestion. And if you have been converting / to \\ ....my $perl_path = '/foo/bar/baz'; print "This is the Windows path: ", win_path($perl_path), "\n"; sub win_path { (my $path = shift) =~ tr!/!\\!; return $path; }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Paths in Perl
by Hanamaki (Chaplain) on Sep 04, 2001 at 18:36 UTC | |
Re: Paths in Perl
by Anonymous Monk on Sep 04, 2001 at 19:05 UTC | |
by jmcnamara (Monsignor) on Sep 04, 2001 at 20:04 UTC | |
Re: Paths in Perl
by John M. Dlugosz (Monsignor) on Sep 05, 2001 at 02:35 UTC | |
CGI Re: Paths in Perl
by andye (Curate) on Sep 05, 2001 at 17:51 UTC | |
by rob_au (Abbot) on Nov 16, 2002 at 01:36 UTC |
Back to
Tutorials