[{"data":1,"prerenderedAt":133},["ShallowReactive",2],{"\u002Fperl6-colons":3},{"id":4,"title":5,"body":6,"createdAt":121,"description":12,"draft":122,"extension":123,"image":124,"mastodonThread":124,"meta":125,"navigation":126,"path":127,"seo":128,"stem":129,"tags":130,"updatedAt":131,"__hash__":132},"content\u002FPerl6 Colons.md","Perl6_Colons",{"type":7,"value":8,"toc":109},"minimark",[9,13,20,23,28,39,43,49,53,59,63,69,73,79,83,89,93,99,103],[10,11,12],"p",{},"I'm collecting all the ways you can use : in Perl 6.",[10,14,15,16,19],{},"Larry's 1st Law of Language Redesign: Everyone wants the colon",[17,18],"br",{},"\nLarry's 2nd Law of Language Redesign: Larry gets the colon",[10,21,22],{},"A lot of these are variations on a theme, especially the theme of \"colon-pair\" syntax. Where two uses of the colon look different or are in a different usage context, even if they are technically the same, I'd prefer to illustrate them both.",[24,25,27],"h3",{"id":26},"namespace","Namespace",[29,30,35],"pre",{"className":31,"code":33,"language":34},[32],"language-text","# namespace\npackage A::B { ... }\nclass A::B { ... }\n\n# Namespace separator\nmy $x = A::B.new;\n\n# Dynamic namespace\nmy $package_name = \"A::B\";\nmy $x = ::($package_name).new;\n\n# Pseudopackage representing null namespace?\nsay :: ;\n\n# Anonymous class\nmy $anon_class = class :: is Int {...}\n\n# Current class in a compile-time var\nclass Who { method myname { say ::?CLASS } }\n\n# Call Int method of Int class\n42.Int::Int;\n\n# Treat package X as a hash\nsay X::.keys;\n","text",[36,37,33],"code",{"__ignoreMap":38},"",[24,40,42],{"id":41},"binding","Binding",[29,44,47],{"className":45,"code":46,"language":34},[32],"# Binding\nmy $y := $a;\n\n# Read-only binding\nmy $z ::= $y;\n\n# Container identity\n$y =:= $a; # True\n",[36,48,46],{"__ignoreMap":38},[24,50,52],{"id":51},"colon-pair-syntax","Colon-Pair Syntax",[29,54,57],{"className":55,"code":56,"language":34},[32],"# Colon-Pair syntax (often seen as adverbs)\nmy $x = 'cat';\n:foo(5)        # 'foo' => 5\n:foo('dog')    # 'foo' => 'dog'\n:foo($x)       # 'foo' => 'cat'\n\n# Value word quoting, no interpolation\n:foo\u003Cbar>      # 'foo' => 'bar'\n:foo\u003Cbar baz>  # 'foo' => ('bar', 'baz')\n:foo\u003C$x>       # 'foo' => '$x'\n\n# Value word quoting with interpolation\n:foo\u003C\u003C$x>>     # 'foo' => 'cat'\n:foo\u003C\u003C$x dog>> # 'foo' => ('cat', 'dog')\n\n# Numeric-prefix extraction\nsay (:73day) # day => 73\n\n# Default to true value\nsay (:foo) # foo => True\n\n# False instead of true\nsay (:!foo) # foo => False\n\n# Var name as key, content as value\nmy $x = 'cat';\nmy @foo=1,2;\n:@foo # foo => [1,2]\n:$x   # x   => 'cat'\n\n# Base conversion via colon-pair\nsay :16(\"dead\") # 57005\n\n# binding pair in sig:\nmy $a;\nsub b (:foo($x)! is rw) { $x = 42};\nb(:foo($a));\nsay $a # 42\n",[36,58,56],{"__ignoreMap":38},[24,60,62],{"id":61},"types","Types",[29,64,67],{"className":65,"code":66,"language":34},[32],"# T takes value's type\n-> Numeric ::T \\x { say T }(42);\n\n# Type Smileys\nInt:D; # Defined Int\nInt:U; # Undefined Int\n",[36,68,66],{"__ignoreMap":38},[24,70,72],{"id":71},"signature","Signature",[29,74,77],{"className":75,"code":76,"language":34},[32],"# signature literal\nmy $sig = :(Int $foo);\n\n# signature on Callable &var, not yet implemented\nmy &f:(Str) = -> Str {};\n",[36,78,76],{"__ignoreMap":38},[24,80,82],{"id":81},"operators-as-methods","Operators as Methods",[29,84,87],{"className":85,"code":86,"language":34},[32],"my $a = 1;\n$a.infix:[\"+\"](3); # $a + 3\n$a.infix:\u003C+>(3);   # $a + 3, but shorter with quote brackets\n$a.prefix:\u003C++>;    # ++$a\n$a.postfix:\u003C++>;   # ++$a\n$a.:\u003C++>;          # Shorthand for prefix (no param)\n$a.:\u003C+>(3);        # Shorthand for infix (param provided)\n",[36,88,86],{"__ignoreMap":38},[24,90,92],{"id":91},"regex","Regex",[29,94,97],{"className":95,"code":96,"language":34},[32],"\n  # Regex adverb\n:i\u002Fa\u002F  # Case insensitive, outside\n\u002F:i a\u002F # Case insensitive, inside\n\n# Declare vars in regex scope\nmy regex foo { :my $var; }\n\n# Backtracking control\n# similar ones not yet implemented are :: ::> :::\n\u002F a: b?: c*: \u002F\n\n# One especially interesting example you often (don't) see is :?\n\u002F .*:? \u002F # explicit minimal match\n\u002F .*? \u002F  # short version that is usually used has no colon\n\n# Unicode character classes\nsay so \"a\" ~~ \u002F\u003C[:Alpha]>\u002F\n",[36,98,96],{"__ignoreMap":38},[24,100,102],{"id":101},"misc","Misc",[29,104,107],{"className":105,"code":106,"language":34},[32],"# Quote adverb\nQ:w(word of the day); \\# :w adverb\n\n# Precedence dropper\n@stuff.map({ $_ + 1 }); # Explicit parameter\n@stuff.map: { $_ + 1 }; # Parameters come after ':'\n\n# Invocant marker method invocation\n$x.say-hi(names => [\u003Cme you>]);  # Normal way\nsay-hi($x: names => [\u003Cme you>]) # Invocant marker way\n\n# Declare alternative to 'self' for current-instance in method\nmethod wuzzup($this: $name) { say \"WUZZUP $name?!\" }\n\n# object hashes, ones with complex keys\nmy $x = :{ (now) => \"when?\" };\n\n# longname\nsub infix:\u003Cya> { ... }\n\n# Specific uses of longnames\nuse Foo:from\u003CPerl5>;\n\n# Loop labels\nMYLABEL: for ^100 {\n  for ^200 {\n    last MYLABEL;\n  }\n}\n\n# Twigil for formal named param for a block (like $^x)\nsay { $:add ?? $^a + $^b !! $^a - $^b }( 4, 5 ) :!add\n\n# This one is a stretch...\n# Colons instead of dashes when you invoke cli commands that use MAIN\nsub MAIN ( :$filename ) { ... }\n\n# cmd --filename=file.txt\n# cmd :filename=file.txt\n# cmd :filename \\# filename => true\n",[36,108,106],{"__ignoreMap":38},{"title":38,"searchDepth":110,"depth":110,"links":111},2,[112,114,115,116,117,118,119,120],{"id":26,"depth":113,"text":27},3,{"id":41,"depth":113,"text":42},{"id":51,"depth":113,"text":52},{"id":61,"depth":113,"text":62},{"id":71,"depth":113,"text":72},{"id":81,"depth":113,"text":82},{"id":91,"depth":113,"text":92},{"id":101,"depth":113,"text":102},"2016-01-13T14:22-05:00",false,"md",null,{},true,"\u002Fperl6-colons",{"title":5,"description":12},"Perl6 Colons",[],"2017-07-23T00:35-04:00","vKOO9A8LMHluTO5Sf0CbVXqbeqXaWnXT8HUvMD_27AM",1778988312702]