Как отмечается в комментариях, вы используете устаревший Switch модуль.Возможно, вы забыли добавить use Switch
, поэтому ключевое слово switch
не импортируется.Если вы хотите эту функцию, вы должны использовать use feature qw(switch)
вместо этого, который использует ключевые слова given
, when
и default
.
Ваше сообщение об ошибке, которое довольно расплывчато, приходит от perl notобработка switch ($variable) { ... }
как правильное утверждение.Компилятор считает, что видит функцию из-за голого слова switch
, за которым следует parens, но следующий блок { ... }
вызывает ошибку.
Это не имеет ничего общего с кодом, предшествующим ему, икод работает для меня, если я добавлю use Switch
это спорно, если с помощью этой конкретной функции для этого кода является хорошим выбором
use feature qw(switch);
sub getName {
my $tempName = $_[0];
given ($tempName)
{
when ('Cart Software') { return 'CART' }
when ('OX-Gift-Hyderabad') { return 'Gift' }
default { return $_[0]}
}
}
эквивалент, не полагаясь на коммутаторе..:
sub getName {
my $name = shift;
return "CART" if $name eq "Cart Software";
return "Gift" if $name eq "OX-Gift-Hyderabad";
return $name;
}
Я думаю, что это предпочтительнее, так как более понятно, какой тип сравнения выполняется.
ETA: Ваша подпрограмма getAge может быть написана намного эффективнее.Я взял на себя смелость удалить ваши случайные заглавные буквы, потому что они злые, и Perl на самом деле различает aFunctionForGettingStuff
и aFunctionForgettingStuff
.
Я вижу, что вы используете какой-то домашний способ обрезания числа,В этом нет необходимости, поскольку в Perl есть встроенная функция, которая делает это: int ()
sub getage {
my $createtime = shift; # shift first argument off @_
my $sec = 86400;
# use int() instead of removing remainder
my $age = int((UnixDate("now", "%s") - $createtime) / $sec);
return $age;
}
Нет необходимости объединять операторы в один, но я думаю, чтоЭто хорошая идея, чтобы удалить как можно больше переменных перехода.Однако я чувствую, что необходимо - с точки зрения читабельности и хорошей практики - не объявлять переменные до тех пор, пока вы на самом деле их не используете.Таким образом, когда вы читаете код и видите my $foo = ...
, вы знаете , что $foo
объявляется и присваивается тогда и там.
Вы можете даже удалить переменную $age
, ноЯ чувствую, что это добавляет что-то к читабельности, чтобы оставить это.