Você usa $'...' quando quiser que sequências de escape sejam interpretadas pelo shell.
$ echo 'a\nb'
a\nb
$ echo $'a\nb'
a
b
Na opção perl , -e , obtenha uma string. Se você usar $'...' , as seqüências de escape na string serão interpretadas antes de passar para perl . No seu caso, \r passou e nunca passou para perl .
com $'...' :
$ perl -MO=Deparse -we $'binmode STDIN;undef $/;$_ = <>;if(/ab\r\ncd/){print "test"}'
BEGIN { $^W = 1; }
binmode STDIN;
undef $/;
$_ = <ARGV>;
if (/ab\ncd/) {
print 'test';
}
-e syntax OK
sem ele:
$ perl -MO=Deparse -we 'binmode STDIN;undef $/;$_ = <>;if(/ab\r\ncd/){print "test"}'
BEGIN { $^W = 1; }
binmode STDIN;
undef $/;
$_ = <ARGV>;
if (/ab\r\ncd/) {
print 'test';
}
-e syntax OK