Попытка переписать $ * ARGFILES - PullRequest
5 голосов
/ 13 марта 2020

Чтобы исправить эту ошибку , мне нужно повторно преобразовать $ * 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";

Но это приводит к ошибке:

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

Я думаю, это не зависит от роли, которую я смешиваю, но я добавляю ее для контекст. Есть идеи, что еще можно сделать?

1 Ответ

11 голосов
/ 13 марта 2020

Ошибка, которую вы видите, очень LTA, но побочный эффект от использования двойных кавычек, когда вы должны были использовать одинарные кавычки:

eval-lives-ok '$*ARGFILES does IO::CatHandle::AutoLines',
  "Can recast \$*ARGFILES";
# ok 1 - Can recast $*ARGFILES

Итак, вы пытаетесь структурировать $*ARGFILES, который дает строку:

<STDIN> does IO::CatHandle::AutoLines

и это не EVAL очень хорошо: -)

...