スカラーコンテキストでは、真偽値を返し(スカラに対する直接の//gの効能は無し)、
リストコンテキストでは正規表現に当った値を返す。
返り値がリストに固定されているんだったら、()=なんて真似はせずに済む。

my $str = 223 ;
printf "%s\n", scalar $str =~ /2/g ; # => 1
printf "%s\n", pos $str ; # => 1
printf "%s\n", scalar $str =~ /2/g ; # => 1
printf "%s\n", pos $str; # => 2
printf "%s\n", scalar $str =~ /2/g ; # => ''
printf "%s\n", pos $str ; # => undef

当然知ってて省略してるんだと思うが一応。