基本的な部分で、評価コンテキストを意識する必要があるわけで。

# 配列はスカラコンテキストで評価されると要素数を、
# リストコンテキストで評価されると内容を返す
# printの引数はリストコンテキストで評価される
my @array = (1, 2, 3);
print @array, "\n"; # (1, 2, 3) (内容)
print scalar @array, "\n"; # 3 (要素数)
print 0 + @array, "\n"; # 3 (要素数)

# コンテキストで正規表現のマッチング動作が変わる
$str =~ m/(\w+)/g; # 1つマッチしたところで止まる
my @m = $str =~ m/(\w+)/g; # $strを全部舐める