Posso criar identificadores de arquivo para seqüências de caracteres no Perl 5, como faço no Perl 6?
No Perl 5, posso criar um identificador de arquivo para uma string e ler ou gravar a partir da string como se fosse um arquivo. Isso é ótimo para trabalhar com testes ou modelos.
Por exemplo:
use v5.10; use strict; use warnings;
my $text = "A\nB\nC\n";
open(my $fh, '<', \$text);
while(my $line = readline($fh)){
print $line;
}
Como posso fazer isso no Perl 6? Os seguintesnão trabalho para Perl 6 (pelo menos não para minha instância do Perl6 rodando emMoarVM 2015.01 deVersão de janeiro de 2015 do Rakudo Star no CentOS 6.5 de 64 bits):
# Warning: This code does not work
use v6;
my $text = "A\nB\nC\n";
my $fh = $text;
while (my $line = $fh.get ) {
$line.say;
}
# Warning: Example of nonfunctional code
Eu recebo a mensagem de erro:
No such method 'get' for invocant of type 'Str'
in block <unit> at string_fh.p6:8
Não é de surpreender que o Perl5open(my $fh, '<', \$text)
não é o mesmo que o Perl6my $fh = $text;
. Portanto, a pergunta é: como criar um identificador de arquivo virtual a partir de uma string no Perl 6, comoopen(my $fh, '<', \$str)
no Perl 5? Ou isso é algo que ainda não foi implementado?
UPDATE (gravando em um manipulador de arquivos no Perl 5)
Da mesma forma, você pode gravar em manipuladores de arquivos de string no Perl 5:
use v5.10; use strict; use warnings;
my $text = "";
open(my $fh, '>', \$text);
print $fh "A";
print $fh "B";
print $fh "C";
print "My string is '$text'\n";
Saídas:
My string is 'ABC'
Ainda não vi nada remotamente semelhante no Perl 6.