Хммм ... ($lotr=$hobbit) =~ s/Bilbo/Frodo/g
- одна из многих магий Perl. Теперь о некоторых ответах.
Q1) $lotr
присваивается значение, содержащееся в $hobbit
. После присваивания мы можем забыть об исходной переменной. Относитесь к ($lotr = $hobbit)
как к собственному утверждению, как если бы мы написали:
$lotr = $hobbit;
$lotr =~ s/Bilbo/Frodo/g;
вместо этого. Регулярное выражение работает на $lotr
.
Q2) Синтаксис представляет собой однострочную версию фрагмента, приведенного выше. Думайте об этом как "скопируйте строку из $a
, скопируйте ее в $b
и измените $b
с помощью регулярного выражения" вместо "взять строку из $a
, измените ее с помощью регулярного выражения, поместите результат в $b
"
В3) Я предполагаю, что вы имеете в виду пространство поиска шаблона по умолчанию под "петлей переменной по умолчанию"? В этом случае просто используйте $_
вместо $hobbit
:
while (<>) {
chomp;
($lotr = $_) =~ s/Bilbo/Frodo/g;
print "\$lotr = [$lotr]\n";
print "\$_ = [$_]\n";
}
Интересно, что магическая переменная $_
не модифицируется этой операцией. Таким образом, вы можете сделать вывод, что присваивание происходит за до подстановки регулярного выражения и что подстановка никак не взаимодействует с пространством шаблона по умолчанию.
А что касается опытных программистов на Perl ... Я не знаю слишком многих людей, которых выбрасывает какой-то фрагмент синтаксиса Perl, независимо от того, как долго они на это смотрят, за исключением, конечно, мистера Шварца;)