Если вы используете Perl 5.10, у вас есть given
/ when
, который является оператором переключения (обратите внимание, что он может сделать больше, чем сравнение с регулярными выражениями, прочитайте связанные документы, чтобы увидеть его полный потенциал ):
#or any of the dozen other ways to tell 5.10 to use its new features
use feature qw/switch/;
given($string) {
when (/^abc/) { $abc = 1; }
when (/^def/) { $def = 1; }
when (/^xyz/) { $xyz = 1; }
default { $nothing = 1; }
}
Если вы используете Perl 5.8 или более раннюю версию, вы должны выполнить операторы if
/ elsif
/ else
:
if ($string =~ /^abc/) { $abc = 1; }
elsif ($string =~ /^def/) { $def = 1; }
elsif ($string =~ /^zyz/) { $xyz = 1; }
else { $nothing = 1; }
или вложенные ] операторы условия (?:
) :
$string =~ /^abc/ ? $abc = 1 :
$string =~ /^def/ ? $def = 1 :
$string =~ /^xyz/ ? $xyz = 1 :
$nothing = 1;
В Core Perl есть модуль ( Switch ), который выдает ложные операторы switch через исходные фильтры , но я понимаю, что он хрупок :
use Switch;
switch ($string) {
case /^abc/ {
case /^abc/ { $abc = 1 }
case /^def/ { $def = 1 }
case /^xyz/ { $xyz = 1 }
else { $nothing = 1 }
}
или альтернативный синтаксис
use Switch 'Perl6';
given ($string) {
when /^abc/ { $abc = 1; }
when /^def/ { $def = 1; }
when /^xyz/ { $xyz = 1; }
default { $nothing = 1; }
}
Ваше положение в 3D задается двумя углами (+ радиус, который в вашем случае постоянен)
x = r * cos(s) * sin(t)
y = r * sin(s) * sin(t)
z = r * cos(t)
здесь s - это угол вокруг оси z , а t - угол высоты , измеренный «вниз» от оси Z.
На рисунке ниже показано, что представляют собой углы, s = тета в диапазоне от 0 до 2 * PI в плоскости xy и t = phi в диапазоне от 0 до PI.