txt: ## -circumflex-accent.md
  ^
  
  Combined from primary sources listed below.
  
  # [In Regexes](#___top "go to top of document")[§](#(Regexes)_^_^ "direct link")
  
  See primary documentation
  [in context](/language/regexes#Start_of_string_and_end_of_string)
  for **Start of string and end of string**.
  
  The `^` anchor only matches at the start of the string:
  
  ```raku
  say so 'karakul'  ~~ /  raku/;    # OUTPUT: «True␤»
  say so 'karakul'  ~~ /^ raku/;    # OUTPUT: «False␤»
  say so 'rakuy'    ~~ /^ raku/;    # OUTPUT: «True␤»
  say so 'raku'     ~~ /^ raku/;    # OUTPUT: «True␤»
  ```
  
  The `$` anchor only matches at the end of the string:
  
  ```raku
  say so 'use raku' ~~ /  raku  /;   # OUTPUT: «True␤»
  say so 'use raku' ~~ /  raku $/;   # OUTPUT: «True␤»
  say so 'rakuy'    ~~ /  raku $/;   # OUTPUT: «False␤»
  ```
  
  You can combine both anchors:
  
  ```raku
  say so 'use raku' ~~ /^ raku $/;   # OUTPUT: «False␤»
  say so 'raku'     ~~ /^ raku $/;   # OUTPUT: «True␤»
  ```
  
  Keep in mind that `^` matches the start of a **string**, not the start of a **line**. Likewise, `$` matches the end of a **string**, not the end of a **line**.
  
  The following is a multi-line string:
  
  ```raku
  my $str = chomp q:to/EOS/;
     Keep it secret
     and keep it safe
     EOS
  
  # 'safe' is at the end of the string
  say so $str ~~ /safe   $/;   # OUTPUT: «True␤»
  
  # 'secret' is at the end of a line, not the string
  say so $str ~~ /secret $/;   # OUTPUT: «False␤»
  
  # 'Keep' is at the start of the string
  say so $str ~~ /^Keep   /;   # OUTPUT: «True␤»
  
  # 'and' is at the start of a line -- not the string
  say so $str ~~ /^and    /;   # OUTPUT: «False␤»
  ```
  
  # [In Traps to avoid](#___top "go to top of document")[§](#(Traps_to_avoid)_twigil_^ "direct link")
  
  See primary documentation
  [in context](/language/traps#The_^_twigil)
  for **The ^ twigil**.
  
  Using the `^` twigil can save a fair amount of time and space when writing out small blocks of code. As an example:
  
  ```raku
  for 1..8 -> $a, $b { say $a + $b; }
  
  ```
  
  can be shortened to just
  
  ```raku
  for 1..8 { say $^a + $^b; }
  
  ```
  
  The trouble arises when a person wants to use more complex names for the variables, instead of just one letter. The `^` twigil is able to have the positional variables be out of order and named whatever you want, but assigns values based on the variable's Unicode ordering. In the above example, we can have `$^a` and `$^b` switch places, and those variables will keep their positional values. This is because the Unicode character 'a' comes before the character 'b'. For example:
  
  ```raku
  # In order
  sub f1 { say "$^first $^second"; }
  f1 "Hello", "there";    # OUTPUT: «Hello there␤»
  
  ```
  
  ```raku
  # Out of order
  sub f2 { say "$^second $^first"; }
  f2 "Hello", "there";    # OUTPUT: «there Hello␤»
  
  ```
  
  Due to the variables allowed to be called anything, this can cause some problems if you are not accustomed to how Raku handles these variables.
  
  ```raku
  # BAD NAMING: alphabetically `four` comes first and gets value `1` in it:
  for 1..4 { say "$^one $^two $^three $^four"; }    # OUTPUT: «2 4 3 1␤»
  
  # GOOD NAMING: variables' naming makes it clear how they sort alphabetically:
  for 1..4 { say "$^a $^b $^c $^d"; }               # OUTPUT: «1 2 3 4␤»
  
  ```
  
  # [In Variables](#___top "go to top of document")[§](#(Variables)_twigil_^ "direct link")
  
  See primary documentation
  [in context](/language/variables#The_^_twigil)
  for **The ^ twigil**.
  
  The `^` twigil declares a formal positional parameter to blocks or subroutines; that is, variables of the form `$^variable` are a type of placeholder variable. They may be used in bare blocks to declare formal parameters to that block. So the block in the code
  
  ```raku
  my @powers-of-three = 1,3,9…100;
  say reduce { $^b - $^a }, 0, |@powers-of-three;
  # OUTPUT: «61␤»
  ```
  
  has two formal parameters, namely `$a` and `$b`. Note that even though `$^b` appears before `$^a` in the code, `$^a` is still the first formal parameter to that block. This is because the placeholder variables are sorted in Unicode order.
  
  Although it is possible to use nearly any valid identifier as a placeholder variable, it is recommended to use short names or ones that can be trivially understood in the correct order, to avoid surprise on behalf of the reader.
  
  Normal blocks and subroutines may also make use of placeholder variables but only if they do not have an explicit parameter list.
  
  ```raku
  sub say-it    { say $^a; } # valid
  sub say-it()  { say $^a; } # invalid
                { say $^a; } # valid
  -> $x, $y, $x { say $^a; } # invalid
  
  ```
  
  Placeholder variables cannot have type constraints or a variable name with a single uppercase letter (this is disallowed to enable catching some Perl-isms).
  
  The `^` twigil can be combined with any sigil to create a placeholder variable with that sigil. The sigil will have its normal semantic effects, as described in the [Sigils table](#Sigils). Thus `@^array`, `%^hash`, and `&^fun` are all valid placeholder variables.
  