=================================================
Subroutine with empty block
=================================================

sub hello {
}

---

(source_file
  (function_definition (identifier)
    (block)
  )
)

=================================================
Subroutine call / function call
=================================================

hello();

---

(source_file
  (call_expression
    function_name: (identifier) args: (empty_parenthesized_argument)) (semi_colon)
)

=================================================
Subroutine with arrow notation
=================================================

my $result = GetSalesforceTemplateInfo($dbh)->{$args->{ALOHA}}->{'NAMASTE'};

---

(source_file
  (variable_declaration (scope) (single_var_declaration (scalar_variable))
    (hash_access_variable
      (hash_access_variable (call_expression (identifier) (argument (scalar_variable)))
        (hash_access_variable (scalar_variable) (bareword))) (string_single_quoted)) (semi_colon)))

=================================================
Subroutine calling another subroutine without params
=================================================

print Dumper %{$args};

---

(source_file
  (call_expression (identifier) (argument
    (call_expression (identifier) (argument (hash_dereference (scalar_variable)))))) (semi_colon)
)

=================================================
Subroutine with CODE signature
=================================================

sub Run (&) {

}

---

(source_file
  (function_definition (identifier) (function_prototype (prototype))
    (block)
  )
)
