Dokumentacja wydaje się skąpa w odniesieniu do instrukcji when
poza blokami given
. Mówi się, że when
może być używany, gdy "temat" został ustawiony, ale kiedy dokładnie temat jest uważany za zestaw? Następujące przypadki:Jakie są warunki, w których można użyć instrukcji "when" w Perlu 5?
for (@arr) {
when { }
}
Wydaje jest to ustawienie domyślne, podstawowa sprawa, ale nie mogłem dostać nawet tej pracy na mój Perl 5.14.2 - Okazało się, że to był kolejny problem z cytowaniem bash.$ perl -Mfeature=switch -e 'foreach (qw(a b c)) { when (/a/) {print 'boom'} }'
nie drukuje. Co ja robię źle?
for my $elem (@arr) {
when { }
}
Czy to działa? Czy $ elem automatycznie stanie się tematem do użycia w when
?
for (@arr) {
$_ = some_expression($_);
when { }
}
Czy to działa? Czy temat można ustawić w pętli?
Czy są jakieś różnice, gdy każdy z powyższych segmentów kodu używa foreach
zamiast for
?
Zasadniczo jestem bardzo niejasny w temacie tematów, więc proszę mnie oświecić.
Zawsze idę źle z cytatami, dzięki. Dzięki za link do innej odpowiedzi, ten i linki z tamtej strony pomogły lepiej zrozumieć status. Mam dziwny przypadek z tym: 'perl -E '@arr = qw (a b c); foreach $ x (@arr) {$ _ = $ x; $ _ ++; when (/ b /) {print $ x}} '' Wypisuje obiekt zgodnie z oczekiwaniami, ale wydaje się, że umiera z błędem" Nie można użyć, gdy() poza tematem w linii -1 ". Ten sam kod działa bez błędu (ale nic nie drukuje), jeśli usunę dwie linie za pomocą $ _. Czy mógłbyś wyjaśnić, co tu się dzieje? – sundar
@sundar, Problemem nie jest wybór ofert. Problem polega na tym, że nie uciekłeś im właściwie. Zobacz aktualizację. – ikegami
ta składnia dla ucieczki "jest nowa i przydatna dla mnie, dzięki. odnośnie do tematyki, dlatego wspomniałem, że "ten sam kod działa bez błędu, jeśli usunę dwie linie za pomocą $ _". Wygląda na to, że każda pętla for/foreach jest traktowana jako topicalizer, nawet dla COŚ (...), ale przypisanie do _ _ wewnątrz pętli powoduje, że jakoś tak się dzieje. – sundar