On 2009-Aug-18, at 3:27 am, Timothy S. Nelson wrote:
On Tue, 18 Aug 2009, David Green wrote:
Maybe setting $*CWD just calls chdir() under the hood? Same
implementation, brand new shiny Perl-style interface!
That was my intent, but we had some discussions on IRC about the
whys and wherefores, and it will return as soon as I do my next
commit (hopefully sometime within the next 4-5 hours). Unless you
can think of a good way to do relative paths.
In my naiveté, I would do:
class IO::CurrentDir; # the type of $*CWD
sub STORE($self: IO::Path $new)
{
chdir($new);
$self = getcwd();
}
or however that would work in P6. It may have problems, but by
definition they're the same problems as chdir() has. What am I missing?
On 2009-Aug-18, at 3:12 am, Jan Ingvoldstad wrote:
It may seem cool, but I don't like secondary effects like that. They
break the principle of least surprise.
It doesn't seem that surprising to me, especially after seeing the
docs the first time. Are there environments where you can set a
variable like $*CWD and it doesn't do something like chdir?
(And we can always keep chdir() as well, so old dogs aren't forced to
learn new tricks.)
On 2009-Aug-18, at 3:52 am, Mark J. Reed wrote:
If $*CWD is really a Path object and not a Str, then it should be easy
to use mutator methods to change to a relative directory and do other
chdir()ish things. Say, concatenation works in terms of path
components, for instance:
$*CWD ~= $subdir; # chdir($subdir)
Yes. Though $*CWD = "subdir" should also work; "subdir" is not the
same path as "/subdir", so it knows whether you're assigning a
relative path or not. Or rather, our path-type would know, and
implicitly prepend the current dir when it parses/forms the actual
pathname, so $CWD would effectively get a fully specified path every
time.
With a method for getting the parent:
given $*CWD { $_ = $_.up ~ $sibling } # chdir("../$sibling")
I like that.
and so on. My favorite kshism is "cd old new" which does a
search/replace on the current working directory; the bash equivalent
"cd ${PWD/old/new}" which is not quite as handy. $*CWD could make
that simple, too.
Ditto.
-David