«Оператор диапазона», который создает список просто , не существует в скалярном контексте - вместо этого оператор ..
при использовании в скалярном контексте является «оператором триггера».Оператор триггера начинает возвращать false, продолжает возвращать false до тех пор, пока его левый аргумент не станет true, затем продолжает возвращать true, пока его правый аргумент не станет true, после чего он возвращает false и возвращается в исходное состояние.Если все это звучит довольно бесполезно, рассмотрим
while (<>) {
print if /BEGIN/ .. /END/;
}
. Оператор ..
начинается с false, поэтому строки из файла не печатаются.Но как только регулярное выражение /BEGIN/
совпадает, триггер становится истинным, и все следующие строки будут напечатаны, пока регулярное выражение /END/
не совпадет.В строке, следующей за «END», триггер снова будет ложным.Таким образом, эффект состоит в том, чтобы печатать только строки между (и включая, но вы можете контролировать это) «НАЧАЛО» и «КОНЕЦ».
В $.
есть немного больше магии, если любая из сторон постоянна, ноне очень важно.Подробнее об операторе триггера читайте в perldoc perlop .