Very nice. ++
I like the twisted logic but the best part is the bare $ at the end. I had to run it through B::Deparse to see what was happening:
$ perl -MO=Deparse -pe '$_=$'
LINE: while (defined($_ = <ARGV>)) {
$_ = $;
}
continue {
die "-p destination: $!\n" unless print $_;
}
It shows that in this case $ gets interpreted as $; the subscript separator. However, this means that your code inserts an extra character in the file as shown by this:
perl -pe '$.-32or$_=$' file | cat -A
But I'm still not sure why perl inserts that semicolon. It doesn't in other cases:
$ perl -MO=Deparse -pe '$_=$.'
LINE: while (defined($_ = <ARGV>)) {
$_ = $.
}
continue {
die "-p destination: $!\n" unless print $_;
}
Anyone have an explanation for this last point?
Update: blakem's answer below is right. This last case is a perl 5.005 issue with B::Deparse.
--
John.
|