On Fri, 30 Dec 2016 01:06:35 -0800, comdog wrote:
> If the HOME environment variable is not set (say, as in
> non-interactive sessions), using $*HOME throws an exception:
> 
> $ unset HOME
> $ echo $HOME
> 
> $ perl6 -e 'put "HOME is $*HOME"'
> Use of uninitialized value of type Any in string context.
> Methods .^name, .perl, .gist, or .say can be used to stringify it
> to something meaningful.
>   in block <unit> at -e line 1
> HOME is
> 
> Curiously, $*TMPDIR is /tmp if the TMPDIR environment variable is not
> set.
> 
> Maybe that's good and maybe not. But, trying to use homedir blows up
> the
> same way tmpdir does
> (https://rt.perl.org/Ticket/Display.html?id=130455):
> 
> $ perl6 -e 'homedir( "/Users/brian" ); put "HOME is $*HOME"'
> No such method 'chdir' for invocant of type 'Any'
>   in block <unit> at -e line 1
> 
> But, homedir isn't documented outside of S16 even though it appears to
> be there somewhere. Trying to set $*HOME directly doesn't work either,
> which is certainly perplexing:
> 
> $ perl6 -e '$*HOME = "/Users/brian"; put "HOME is $*HOME"'
> Cannot modify an immutable Any
>   in block <unit> at -e line 1
> 
> I can set a key is a completely different variable to get it to work:
> 
> $ perl6 -e '%*ENV<HOME> = "/Users/brian"; put "HOME is $*HOME"'
> HOME is /Users/brian
> 
> And I can even set it to a directory that does not exist:
> 
> $ perl6 -e '%*ENV<HOME> = "/Users/brian/not-there"; put "HOME is
> $*HOME"'
> HOME is /Users/brian/not-there
> 
> The $*HOME variable is listed in . If it isn't set, it's documented to
> be Nil, but it is apparently Any. That also appears to mess with the
> REPL:
> 
> $ perl6
> I ran into a problem while trying to set up Linenoise: Cannot
> resolve caller new(IO::Path: Any); none of these signatures match:
>     (IO::Path $: Cool $path, :$SPEC = { ... }, :$CWD = { ... }, *%_)
>     (IO::Path $: :$basename!, :$dirname = "", :$volume = "",
> :$SPEC = { ... }, :$CWD = { ... }, *%_)
>     (IO::Path $: *%_)
> Continuing without tab completions or line editor
> You may want to consider using rlwrap for simple line editor
> functionality
> 
> To exit type 'exit' or '^D'
> > $*HOME
> (Any)
> >

Thank you for the report. All the points in this ticket are now resolved:

- "If HOME env var unset, using $*HOME throws an exception"
    - That's just a stringified-undef warning. You can use `quietly` to quiet 
it.
- "Trying to use homedir blows up"
    - &homedir has been removed; use $*HOME directly
- "Trying to set $*HOME directly doesn't work either"
    - That was fixed[^1] by lizmat and is available in 2017.04 compiler 
release; tests in [^2]
- "It's documented to be Nil, but it is apparently Any"
    - This is now fixed[^3] and tested[^4] to be Nil; will be in 2017.05 release
- "I can even set it to a directory that does not exist"
    - After a discussion[^5] (a soliloquy?), I think that behaviour is most 
desirable
- "That also appears to mess with the REPL"
    - This is now fixed[^6] (will be in 2017.05 release). 
        For testing this, added a TODO note into Rakudo's test suite, since the 
test
        requires Linenoise/Readline to be installed.

[^1] 
https://github.com/rakudo/rakudo/commit/1b9d53ce5ed1e9e1c546f39fbec4fe342667ed1c
[^2] https://github.com/perl6/roast/commit/2d9194fff9
[^3] https://github.com/rakudo/rakudo/commit/7412184fcd
[^4] https://github.com/perl6/roast/commit/71a6423a99
[^5] https://irclog.perlgeek.de/perl6-dev/2017-04-27#i_14496170
[^6] https://github.com/rakudo/rakudo/commit/1b0e41f972

Reply via email to