if ($option =~ m/^\[(\d)\]$/) { print "Activated!"; $str=$1; }
Или
if (my ($str) = $option =~ m/^\[(\d)\]$/) { print "Activated!" }
Или
if (my ($str) = $option =~ /(\d)/) { print "Activated!" }
.. и куча других. Вы забыли захватить ваш матч с помощью () .
EDIT:
if ($option =~ /(?<=^\[)\d(?=\]$)/p && (my $str = ${^MATCH})) { print "Activated!" }
Или
my $str;
if ($option =~ /^\[(\d)(?{$str = $^N})\]$/) { print "Activated!" }
Или
if ($option =~ /^\[(\d)\]$/ && ($str = $+)) { print "Activated!" }
Для $ {^ MATCH}, $ ^ N и $ +, perlvar .
Мне нравятся эти вопросы:)