试图重铸 $*ARGFILES

jjm*_*elo 5 io raku

为了修复这个错误,我需要将 $*ARGFILES 重新转换为 IO::CatHandle,因为它使用了该类的一些属性。我正在尝试这个:

use IO::CatHandle::AutoLines; # -*- mode:perl6 -*-
use Test;

if $*ARGFILES === $*IN {
    $*ARGFILES = IO::CatHandle.new( $*IN );
}
eval-lives-ok "$*ARGFILES does IO::CatHandle::AutoLines", "Can recast \$*ARGFILES";

Run Code Online (Sandbox Code Playgroud)

但这会产生错误:

# Error: Unsupported use of <STDIN>; in Perl 6 please use $*IN.lines (or add whitespace to suppress warning)
Run Code Online (Sandbox Code Playgroud)

我认为这与我混合的角色无关,但我添加它是为了上下文。知道还有什么可以做的吗?

Eli*_*sen 11

您看到的错误非常 LTA,但是使用双引号的副作用,当您应该使用单引号时:

eval-lives-ok '$*ARGFILES does IO::CatHandle::AutoLines',
  "Can recast \$*ARGFILES";
# ok 1 - Can recast $*ARGFILES
Run Code Online (Sandbox Code Playgroud)

所以你正在尝试 stringify $*ARGFILES,它产生字符串:

<STDIN> does IO::CatHandle::AutoLines
Run Code Online (Sandbox Code Playgroud)

这不是EVAL很好:-)