为什么perl regex.*在空分隔记录中不识别\n.$/="\ 0'

Pet*_*r.O 1 regex perl substitution

我正在尝试解析一些\x00空分隔的数据.我认为在一个-pe/-ne循环中,$_相当于.*替换正则表达式的模式匹配方...但是正如我的例子所示,它们不一样......

                                                  #      ???? works, but is not a regex
printf 'aaa\n\0bbb\n\0' | perl -ne 'BEGIN{ $/="\0"; }; s/$_/\"$.$&\"/ and print;' |xxd
printf 'aaa\n\0bbb\n\0' | perl -ne 'BEGIN{ $/="\0"; }; s/.*/\"$.$&\"/ and print;' |xxd
                                                  #      ??__ gives un-expected output

# output                                          #      ?       ? 
0000000: 2231 6161 610a 0022 2232 6262 620a 0022  "1aaa..""2bbb.."
0000000: 2231 6161 6122 0a00 2232 6262 6222 0a00  "1aaa".."2bbb"..
                                                  #    ?       ?
Run Code Online (Sandbox Code Playgroud)

获得一种s/ / /替代品来识别全部需要$_什么?

eph*_*ent 5

.\n除非使用/s修饰符,否则不匹配.

printf 'aaa\n\0bbb\n\0' | perl -ne 'BEGIN{ $/="\0"; }; s/.*/\"$.$&\"/s and print;' |xxd
Run Code Online (Sandbox Code Playgroud)

或者,可以使用字符类代替..

printf 'aaa\n\0bbb\n\0' | perl -ne 'BEGIN{ $/="\0"; }; s/[\s\S]*/\"$.$&\"/ and print;' |xxd
Run Code Online (Sandbox Code Playgroud)

在这里,[\s\S]匹配任何空格或非空格字符(换句话说,任何字符).