!!! Listings aus dem Artikel "Richtig schreiben" von !!! Moritz Lenz in iX 3/2016, S. 62 !!! Listing 1:Perl reißt Codepoints nicht auseinander @li:sub truncate-to(Str $input, Int $chars where $chars > 0) { if $input.chars > $chars { return $input.substr(0, $chars - 1) ~ '..' } else { return $input; } } my $input = "a\c[COMBINING DEVANAGARI LETTER NA]"; say truncate-to($input, 1); # !!!Devanagari-Zeichen NA!!! !!! Listing 2:Ein Graphem -- zwei Zeichen für Python et al. def truncate_to(input_, chars): if len(input_) > chars: return input_[0:chars] + '..' else: return input_ input_ = "a\N{COMBINING DEVANAGARI LETTER NA}" print(truncate_to(input_, 1)) # a.. !!! Listing 3:Neues Meta-Objekt erzeugen constant Point = Metamodel::ClassHOW.new_type( name => 'Point' ); for '$!x', '$!y' -> $name { Point.^add_attribute( Attribute.new( name => $name, has_accessor => 1, type => Mu, package => Point, ) ); }; Point.^add_method('magnitude', anon method magnitude() { return sqrt( $.x * $.x + $.y * $.y ); }); Point.^compose; say Point.new(x => 6, y => 8).magnitude; !!! Listing 4:Asynchorene Arbeit sub number-of-primes(Int $upto) { (1..$upto).grep(&is-prime).elems } my $promise = start { number-of-primes(4000) }; say $promise.status; # Planned await $promise; say $promise.status; # Kept say $promise.result; # 550 !!! Listing 5:Nur kurz warten my $promise = (start { number-of-primes(4000) }).then( -> $p { say $p.result } ); await Promise.anyof($promise, Promise.in(0.5)); !!! Listing 6:Was Worker tun my $source = Channel.new; my @worker = (1..4).map: -> $i { start { loop { my $v = $source.receive; # hier $v bearbeiten say $v x 5; CATCH { when X::Channel::ReceiveOnClosed { say "Shutting down worker $i"; last; } } } } } for 1..100 { # Daten in die Queue schicken $source.send(('a' .. 'z').pick); } $source.close; await @worker; !!! Listing 7:Änderungen im Dateisystem use v6; sub MAIN(Str $path = '.') { react { whenever IO::Notification.watch-path('.') \ .stable(0.2) -> $event { my $path = $event.path.IO; if $path.s { say "$path: ", $path.s; } } whenever signal(SIGINT) { say "Shutting down"; done; } } }