#!/usr/bin/perl
use strict;
use warnings;
use Switch;

my $perl = "Perl";
my %hash = ( "A" => 2, "B" => 3 );
my $cref = sub { $_[0] eq "C" };
sub testcase { $_[0] eq "D" };
my @array = (2..4);

my @values=qw[
    1 perl Perl 3 6 pErl PerL pERL pERl peRL PERL php
];

foreach my $input (@values) {
    switch ($input) {
        case 1                     { print "literal number" }
        case "perl"                { print "literal string" }
        case ($perl)               { print "string variable" }
        case (\@array)             { print "array variable reference" }
        case [5..9]                { print "literal array reference" }
        case (%hash)               { print "hash key" }
        case { "PerL" => "Value" } { print "hash reference key" }
        case { $_[0] eq "pERL" }   { print "anonymous sub" }
        case ($cref)               { print "anonymous code reference" }
        case (\&testcase)          { print "named code reference" }
        case /^perl/i              { print "regular expression" }
        else                       { print "not known" }
    }
    print "\n";
}