Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use v5.12;
- use utf8;
- use strict;
- use warnings;
- # to declare short arrow functions
- sub Ω {
- my $in = shift;
- return sub {
- my $out = shift;
- my $old = $@;
- $@ = "";
- my $sub = eval "sub {
- my ($in) = \@_;
- return $out;
- }";
- if ($@) {
- my $err = $@;
- $@ = $old;
- return die $err;
- }
- else {
- $@ = $old;
- return $sub;
- }
- }
- }
- # to declare short lambdas
- sub λ {
- my $str = shift;
- if ($str =~ /(.*):(.*)/) {
- my ($in, $out) = ($1, $2);
- my $old = $@;
- $@ = "";
- my $sub = eval "sub {
- my ($in) = \@_;
- return $out;
- }";
- if ($@) {
- my $err = $@;
- $@ = $old;
- return die $err;
- }
- else {
- $@ = $old;
- return $sub;
- }
- }
- return die "Bad signature!";
- }
- my $incr = Ω ('$x') -> ('$x + 1');
- say &$incr (4); # ---> 5
- say &{ λ q| $x, $y: $x + $y | } (5, 10); # ---> 15
- # end of script
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement