为什么#字符在Perl中被视为"单词"字符?

Mar*_*cus 4 regex perl

为什么#字符在Perl中被视为"单词"字符?或者我误解了这段代码应该如何工作?

#!/usr/bin/perl

my $filename = "Something_with_#_sign.jpg";

$filename =~ s/        # substitute...
                [^             # characters which are NOT:
                \w                # "word" characters
                ]              # end of character classes
                /_/xg;     # ...with an underscore

print "$filename\n";
Run Code Online (Sandbox Code Playgroud)

产量:

Something_with_#_sign.jpg
Run Code Online (Sandbox Code Playgroud)

我原以为#符号已被_(下划线)取代.

ike*_*ami 10

/x不修改字符类的语法(或\x20,或s{3,4},等,等),所以

[^             # characters which are NOT:
\w                # "word" characters
]              # end of character classes
Run Code Online (Sandbox Code Playgroud)

是一种奇怪的写作方式

[^ "#:NOTacdefhilnorst\n\w]
Run Code Online (Sandbox Code Playgroud)