2017-01-09 33 views
6

Próbuję otworzyć plik do zapisu i użyć formatu printf, ale dokumentacja i rzeczywistość nie wydają się zgadzać. Czy czegoś brakuje?perl6 IO :: Handle nie ma metody printf, niezgodne z dokumentacją lub coś przeoczyłem?

To exit type 'exit' or '^D' 
> my $fh=open "test", :w; 
IO::Handle<"test".IO>(opened, at octet 0) 
> $fh.printf: "test"; 
No such method 'printf' for invocant of type 'IO::Handle' 
    in block <unit> at <unknown file> line 1 

Ale mój kod wydaje się w porządku, zgodnie z dokumentacją:

https://docs.perl6.org/routine/printf 

Dziękuję bardzo !!

Odpowiedz

7

Przykład w the docsprintf() nie działa na mnie albo:

~/p6_programs$ perl6 -v 
This is Rakudo version 2016.11 built on MoarVM version 2016.11 
implementing Perl 6.c. 

~/p6_programs$ cat 4.pl6 
my $fh = open 'outfile.txt', :w; 
$fh.printf: "The value is %d\n", 32; 
$fh.close; 

~/p6_programs$ perl6 4.pl6 
No such method 'printf' for invocant of type 'IO::Handle' 
    in block <unit> at 4.pl6 line 3 

Można użyć sprintf() jako obejście:

my $fh = open 'outfile.txt', :w; 
$fh.say: sprintf "The value is %d", 32; 
$fh.close; 

lub fmt():

my $fh = open 'outfile.txt', :w; 
$fh.say: 32.fmt("The value is %d"); 
$fh.close; 
+1

Dziękuję bardzo! Użyję obejścia sprintf. – lisprogtor

8

Najwidoczniej IO::Handle.printf został dodany na Nov 27, 2016, a Rakudo 2016.11 jest oznaczony na Nov 19. Domyślam się, że twój Rakudo jest starszy.

+0

Dzięki! Używam wersji Nov: perl6 -v To jest wersja Rakudo 2016.11 zbudowany na wersji MoarVM 2016.11 implementacja Perl 6.c. – lisprogtor