\w 表示匹配大小写英文字母、数字以及下划线,等价于'[A-Za-z0-9_]'。
\S 表示匹配非空白字符,范围可广了,只要不是空格、换行符、制表符、换页符即可

你举的例子看不出区别,但你试试 my $names = "Fred and Bar-ney"; 就看出来了

\w 不包括 :;"'+-*/@# 这些... 只有 [a-zA-Z0-9_]
\S 非空白就行了, 可以理解为 [a-zA-Z0-9_] 再加上 :;"'+-*/@# ... 这些

\w 是可以组成单词的[a-zA-Z0-9_]不包含特殊符号
\S 是非空格,制表符,换行等