Значение переключателя 'Смещение экспозиции' не равно значению второго случая (оба они являются строками, равенство строк используется согласно таблице в начале POD).
Поэтому, когда провал заставляет переключатель перейти ко второму случаю; это просто не соответствует. Поскольку больше нет случаев, он выходит.
Чтобы проиллюстрировать, этот код напечатает вывод Second case for bias
, если вы запустите его:
use Switch;
use strict; use warnings;
my $field = 'Exposure Bias';
switch($field){
case 'Exposure Bias' {next;}
case 'Exposure Bias Value' {print 'Exp: ' . $field . "\n";}
case /Exposure Bias/ { print "Second case for bias\n";} # RegExp match
}
Он начинает работать так же, как ваш код (первый совпадает, next
вызывает переход ко второму, второй не совпадает), и, так как есть третий случай, и он соответствует, этот блок получает казнены.
Я не совсем уверен, как вы хотели, чтобы второй случай совпадал (например, по какой логике "Значение смещения экспозиции" будет соответствовать значению "Смещение экспозиции") - единственное, что приходит на ум, это то, что вы хотели ваше поле "действовать как регулярное выражение и каждое значение регистра должно быть строкой, сопоставленной с этим регулярным выражением. Если это так, вам нужно записать его следующим образом, используя тот факт, что значение переключателя может быть ссылкой на подпрограмму (к сожалению, это не может быть регулярным выражением, хотя, как вы видели выше, это возможно):
use Switch;
use strict; use warnings;
my $field = sub { return $_[0] =~ /Exposure Bias/ };
switch($field){
case 'Exposure Bias' {next;}
case 'Exposure Bias Value' {print "Exp\n";}
}
Последний производит Exp
вывод.
UPDATE
На основании обновленной информации в вопросе проще всего просто указать обе строки во втором случае как arrayref:
use Switch;
use strict; use warnings;
my $field = "Exposure Bias";
switch($field){
case 'Exposure Bias' { print "First match\n"; next;}
case ['Exposure Bias Value', 'Exposure Bias'] {print "Exp: $field\n";}
}
$ perl ~/a.pl
First match
Exp: Exposure Bias
Лучше абстрагироваться от значения, конечно:
use Switch;
use strict; use warnings;
my $field = "Exposure Bias";
my $exp_bias = 'Exposure Bias';
switch($field){
case "$exp_bias" { print "First match\n"; next;}
case ['Exposure Bias Value', "$exp_bias" ] {print "Exp: $field\n";}
}