为了修复这个错误,我需要将 $*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很好:-)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |