Dokumentation scheint spärlich in Bezug auf when
Aussagen außerhalb given
Blöcke. Es wird gesagt, dass die when
verwendet werden kann, wenn ein "Thema" festgelegt wurde, aber wann genau ist ein Thema als festgelegt? Betrachten Sie diese Fälle:Unter welchen Bedingungen kann man in Perl 5 eine 'when'-Anweisung verwenden?
for (@arr) {
when { }
}
scheint dies ist die Standardeinstellung, Grund Fall aber ich konnte nicht einmal diese Arbeit auf meinem Perl 5.14.2 bekommen - Es stellte sich heraus, dass dies nur ein weiteres Bash-Zitat war.$ perl -Mfeature=switch -e 'foreach (qw(a b c)) { when (/a/) {print 'boom'} }'
druckt nichts. Was mache ich falsch?
for my $elem (@arr) {
when { }
}
Würde das funktionieren? Wird $ elem automatisch zum Thema für when
werden?
for (@arr) {
$_ = some_expression($_);
when { }
}
Würde das funktionieren? Kann das Thema innerhalb der Schleife gesetzt werden?
Gibt es auch einen Unterschied, wenn jedes der obigen Codesegmente foreach
anstelle von for
verwendet?
Grundsätzlich bin ich sehr unklar zu dem Thema Themen, also bitte erleuchte mich.
Ich bin immer falsch mit den Zitaten, danke. Danke für den Link zu Ihrer anderen Antwort, dass und die Links von dort geholfen, den Status besser zu verstehen. Ich habe einen seltsamen Fall mit diesem: 'perl -E '@arr = qw (a b c); foreach $ x (@arr) {$ _ = $ x; $ _ ++; when (/ b /) {print $ x}} '' Es druckt wie erwartet, aber dann scheint mit dem Fehler zu sterben" Kann nicht wenn() außerhalb eines topicizer bei -e Zeile 1 ". Der gleiche Code läuft ohne Fehler (aber nichts drucken), wenn ich die beiden Zeilen mit $ _ entferne. Kannst du erklären, was hier vor sich geht? – sundar
@sundar, Das Problem ist nicht die Wahl der Zitate. Das Problem ist, dass Sie ihnen nicht richtig entkommen konnten. Siehe Aktualisierung. – ikegami
diese Syntax für die Flucht 'ist neu und nützlich für mich, danke. in Bezug auf die Topicalisierung, deshalb habe ich erwähnt, dass "der gleiche Code ohne Fehler ausgeführt wird, wenn ich die zwei Zeilen mit $ _ entfernen". Es scheint, dass jede for/foreach-Schleife als Aktualisierer behandelt wird, selbst für ETWAS (...), aber das Zuweisen zu $ _ innerhalb der Schleife vermasselt das irgendwie. – sundar