Folks,
This is a poetic quine (or quine-maker) in perl5.
open myself, $0 and print <myself>;
The same thing in perl6 would be:
my $self = open $*PROGRAM_NAME; for =$self { say }
or
my $self = open $*PROGRAM_NAME; say for =$self;
or
my $self = slurp $*PROGRAM_NAME; print $self;
or even
$*PROGRAM_NAME.slurp.map:{ print };
The last example must not be
$*PROGRAM_NAME.slurp.print;
You can check it out by running the code below;
##
$*PROGRAM_NAME.slurp.print
##
Will print:
##$*PROGRAM_NAME.slurp.print##
This is because print() (and say()) expects list context and slurp()
passes an array of chomped strings. When it comes to autoboxing, the
context-sensitivity of builtins may bite you like this.
With that understood, I would welcome if we have a version of slurp()
which unconditionally returns a scalar. Say swallow()? Of course it
is as easy to implement as the following;
sub swallow($file){ my $content = slurp $file; return $content };
But like say(), I would love to have something like that as a builtin.
Or am I getting too much ruby recently?
Dan the Perl6 Addict