#!/usr/bin/perl use strict; use warnings 'all'; my @vampire; foreach my $s (1 .. shift) { LOOP: foreach my $t (1 .. $s) { my $prod = $s * $t; my $cat = "$s$t"; foreach my $d (0 .. 9) { next LOOP unless eval "\$prod =~ y/$d/$d/ == \$cat =~ y/$d/$d/"; } push @vampire => [$prod, $s, $t]; } } @vampire = sort {$a -> [0] <=> $b -> [0]} @vampire; foreach my $vamp (@vampire) { printf "%4d * %4d = %8d\n" => @$vamp [1, 2, 0]; }