use 5.18.2; use warnings; use charnames qw(:full); use Test::More; # 1: Create an array named @letters with 5 elements and fill it with first 5 letters # of the English alphabet diag ("Assignment 1"); # Q: Capitals or lower-case? my $l = [ "a" .. "e" ]; my @letters; @letters = ("a", "b", "c", "d", "e"); is_deeply (\@letters, $l); @letters = ("a" .. "e"); is_deeply (\@letters, $l); @letters = map { chr } 0x61 .. 0x65; is_deeply (\@letters, $l); # Assuming ASCII @letters = map { chr ($_ + ord "a") } 0 .. 4; is_deeply (\@letters, $l); # Assuming ASCII @letters = map { lc } "A" .. "E"; is_deeply (\@letters, $l); @letters = split m// => "abcde"; is_deeply (\@letters, $l); @letters = map { charnames::string_vianame ("LATIN SMALL LETTER $_") } "A" .. "E"; is_deeply (\@letters, $l); @letters = map { chr charnames::vianame ("LATIN SMALL LETTER $_") } "A" .. "E"; is_deeply (\@letters, $l); @letters = map { substr "the quick brown fox jumps over the lazy dog", $_, 1 } 36, 10, 7, 40, 2; is_deeply (\@letters, $l); @letters = (sort grep m/\S/ => split m// => "the quick brown fox jumps over the lazy dog")[0..4]; is_deeply (\@letters, $l); @letters = (sort split m// => "the quick brown fox jumps over the lazy dog")[8..12]; is_deeply (\@letters, $l); @letters = (sort unpack "(A)*", "the quick brown fox jumps over the lazy dog" =~ s{\s+}{}gr)[0..4]; is_deeply (\@letters, $l); @letters = @{[ "a" .. "e" ]}; is_deeply (\@letters, $l); @letters = sort keys %{{qw( b 3 d 2 a 1 e 9 c 0 )}}; is_deeply (\@letters, $l); @letters = unpack "x3(a)*", pack "Q>", 418262508645; is_deeply (\@letters, $l); @letters = (unpack "(a)*",pack"Q<",435475931745)[0..4]; is_deeply (\@letters, $l); # Not one statement, so these won't qualify $letters[0] = "a"; $letters[1] = "b"; $letters[2] = "c"; $letters[3] = "d"; $letters[4] = "e"; is_deeply (\@letters, $l); @letters = ("a"); push @letters, "b", "c" .. "e"; is_deeply (\@letters, $l); @letters = do { eval q{"a"-"e"} =~ s/-/../r }; is_deeply (\@letters, $l); # 2: Remove the first element using a list operator and assign it to a scalar variable diag ("Assignment 2"); my $a2 = [ "b" .. "e" ]; my (@a2, $first) = @letters; @letters = @a2; $first = shift @letters; is_deeply (\@letters, $a2); is ($first, "a"); @letters = @a2; $first = splice @letters, 0, 1; is_deeply (\@letters, $a2); is ($first, "a"); @letters = @a2; ($first, @letters) = @letters; is_deeply (\@letters, $a2); is ($first, "a"); # 3: Remove the last element using a list operator and assign it to a scalar variable diag ("Assignment 3"); my $a3 = [ "b" .. "d" ]; my (@a3, $last) = @letters; @letters = @a3; $last = pop @letters; is_deeply (\@letters, $a3); is ($last, "e"); @letters = @a3; $last = splice @letters, -1, 1; is_deeply (\@letters, $a3); is ($last, "e"); @letters = @a3; ($last, @letters) = ($letters[-1], @letters[0..($#letters-1)]); is_deeply (\@letters, $a3); is ($last, "e"); # 4: Join these two removed elements with a '-' (using single quotes) sign and assign # the result to a scalar named $result # Q: Why single quotes? WHY? I only use single quotes if I really have to diag ("Assignment 4"); my $result; $result = "$first-$last"; is ($result, "a-e"); $result = "$first@{['-']}$last"; is ($result, "a-e"); $result = $first . '-' . $last; is ($result, "a-e"); $result = join '-' => $first, $last; is ($result, "a-e"); $result = do { local $" = '-'; "@{[$first, $last]}" }; is ($result, "a-e"); $result = sprintf "%s%s%s", $first, '-', $last; is ($result, "a-e"); done_testing;