summaryrefslogtreecommitdiffhomepage
path: root/perl6.html.markdown
diff options
context:
space:
mode:
Diffstat (limited to 'perl6.html.markdown')
-rw-r--r--perl6.html.markdown33
1 files changed, 29 insertions, 4 deletions
diff --git a/perl6.html.markdown b/perl6.html.markdown
index ee94f5bf..d0ccdc9a 100644
--- a/perl6.html.markdown
+++ b/perl6.html.markdown
@@ -118,13 +118,38 @@ say %hash<key2>; # If it's a string, you can actually use <>
# created with the `sub` keyword.
sub say-hello { say "Hello, world" }
-sub say-hello-to(Str $name) { # You can provide the type of an argument
- # and it'll be checked at compile-time.
-
+# You can provide (typed) arguments.
+# If specified, the type will be checked at compile-time if possible,
+# otherwise at runtime.
+sub say-hello-to(Str $name) {
say "Hello, $name !";
}
-## It can also have optional arguments:
+# A sub returns the last value of the block.
+sub return-value {
+ 5;
+}
+say return-value; # prints 5
+sub return-empty {
+}
+say return-empty; # prints Nil
+
+# Some control flow structures produce a value, like if:
+sub return-if {
+ if True {
+ "Truthy";
+ }
+}
+say return-if; # prints Truthy
+
+# Some don't, like for:
+sub return-for {
+ for 1, 2, 3 { }
+}
+say return-for; # prints Nil
+
+
+## A sub can have optional arguments:
sub with-optional($arg?) { # the "?" marks the argument optional
say "I might return `(Any)` (Perl's 'null'-like value) if I don't have
an argument passed, or I'll return my argument";