http://qs1969.pair.com?node_id=581607

Here is a small collection of Perl 6 code snippets lifted and mangled from pugs/examples/cookbook
# ARRAYS my @a = <94 13 97 95>; for @a -> $e { say $e; } # HASHES my %hash = ( 'one' => 'un', 'two' => 'deux', 'three' => 'trois' ); for %hash.keys -> $key { say "$key => %hash{$key}"; } for %hash.kv -> $key, $value { say "The word '$key' is '$value' in French."; } # SUBROUTINES sub perl5 { my ($x) = @_; say $x; } perl5('old-fashioned'); sub parameters ($foo) { say $foo } parameters('some parameter'); parameters 'some parameter'; parameters foo => 'some parameter'; parameters :foo('some parameter'); sub whole (@names, %flags) { for @names -> $name { say $name; } for (%flags.kv) -> $key, $value { say "$key => $value"; } } my @stuff = ('array', 'elements'); my %flags = (hash => 'elements', are => 'pairs'); whole(@stuff, %flags); sub optional ($required, $optional?) { my $second_arg = $optional // 'Told you it was optional!'; say $required; say $second_arg; } optional('this'); optional('this', 'that'); sub named_params ($first, :$second, :$third) { say $first, $second, $third; } named_params(1, second => 2, third => 3); sub transport ($planet, *@names) { say "Transporting to $planet:"; for @names -> $name { say "\t$name"; } } transport('Magrathea', 'Arthur', 'Ford', 'Ovid'); sub typed (Int $val) { say $val + 3; } typed(3); # LOOP OVER STDIN while $_ = =<> { .print; } # OPEN A FILE FOR READING my $input = open("myfile.txt", :r) err die $!; my $line = $input.readline; $input.close; # OPEN A FILE FOR WRITING my $output = open("out.txt", :w) err die $!; $output.say("blah"); $output.close;

Replies are listed 'Best First'.
Re: Perl 6, arrays, hashes, subroutines & basic file IO
by lidden (Curate) on Nov 01, 2006 at 15:19 UTC
    print; to print $_ is now spelled .print; notice the dot.
      print; to print $_ is now spelled .print; notice the dot.

      And also, with reference to the point you're actually referring to, for is now good for looping over a handle too, thanks to lazy evaluation, thus:

      # LOOP OVER STDIN for =<> { .print; }
Re: Perl 6, arrays, hashes, subroutines & basic file IO
by zentara (Archbishop) on Nov 01, 2006 at 12:52 UTC
    2 beginner questions on Perl6.

    1. Where is the 'my' in those variable usages?

    2. Why did they switch from 'print' to 'say'? It's shorter?


    I'm not really a human, but I play one on earth. Cogito ergo sum a bum
      1. The only 'variables' I see without my in those snippets are formal parameter names, which are declarative only?
      2. say $var; is equivalent to print $var . $/;

      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
      Where is the 'my' in those variable usages?

      As BrowserUk wrote, I don't see any missing. While we're here I'll take a chance to remind that differently from Perl 5, Perl 6 has strict and warnings turned on by default except in particular situations, e.g. in oneliners, where it's most often better otherwise.

      Why did they switch from 'print' to 'say'? It's shorter?

      Err, well, yes: easy things should be easy. And Perl has been somehow missing a writeln/println statement for quite a long time. But as also pointed out by BrowserUk, they did not "switch": you will have both print and say. The interesting thing to note here is that iirc in conjunction with the use of the latter autochomp actions are often taken, although it's not entirely clear to me how and when (I know the answer is out there I'm just too lazy ATM) - but it seems that $_ is not chomped by default:

      pugs> say .chars for <foo bar baz>; 3 3 3 undef pugs> say .chars for =<>; foo 4 bar 4 baz 4