chomp() は $/ に依存していると知れ!
perldocにあるように、chomp()
の挙動は $/ に依存します。ということは、うっかり local $/
したスコープで chomp()
を行うと、何もおきません。
この結果起きる現象がきわめて不可解なので、readlineの直後以外の場面ではchomp()
を使わず s/\r?\n\z//xms
するのが無難でしょう*1。
use strict; use warnings; local $/; my $s = "Hello\n"; chomp $s; print "[$s]\n"; # => #[Hello #]
Xslateがまさにこれにはまっていたので修正しました。
https://github.com/xslate/p5-Text-Xslate/commit/92c7387b0f0ebdad5761c420a54564b9e8d2f635
[追記]