Advertisement
Guest User

Untitled

a guest
Dec 21st, 2014
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.81 KB | None | 0 0
  1. use v5.12;
  2. use utf8;
  3. use strict;
  4. use warnings;
  5.  
  6. # to declare short arrow functions
  7. sub Ω {
  8. my $in = shift;
  9. return sub {
  10. my $out = shift;
  11. my $old = $@;
  12. $@ = "";
  13. my $sub = eval "sub {
  14. my ($in) = \@_;
  15. return $out;
  16. }";
  17. if ($@) {
  18. my $err = $@;
  19. $@ = $old;
  20. return die $err;
  21. }
  22. else {
  23. $@ = $old;
  24. return $sub;
  25. }
  26. }
  27. }
  28.  
  29. # to declare short lambdas
  30. sub λ {
  31. my $str = shift;
  32. if ($str =~ /(.*):(.*)/) {
  33. my ($in, $out) = ($1, $2);
  34. my $old = $@;
  35. $@ = "";
  36. my $sub = eval "sub {
  37. my ($in) = \@_;
  38. return $out;
  39. }";
  40. if ($@) {
  41. my $err = $@;
  42. $@ = $old;
  43. return die $err;
  44. }
  45. else {
  46. $@ = $old;
  47. return $sub;
  48. }
  49. }
  50. return die "Bad signature!";
  51. }
  52.  
  53. my $incr = Ω ('$x') -> ('$x + 1');
  54. say &$incr (4); # ---> 5
  55.  
  56. say &{ λ q| $x, $y: $x + $y | } (5, 10); # ---> 15
  57.  
  58. # end of script
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement