Ах, вы поняли, почему ?:
плохая идея, за исключением тривиальных случаев.
Проблема с приоритетом оператора.Скорее всего, вы захотите сделать это:
$return = ($_[0] < 10) ? "you're a youngin'" : "you're an old fart";
Однако с вашим кодом есть несколько других проблем.
- Вы должны объявить свои переменные.Они не объявляются при первом использовании, как в PHP;Вы делаете это явно с помощью оператора
my
. - Вы должны всегда, всегда, всегда
use strict
и use warnings
в Perl-коде.Эти прагмы отключают древние махинации Perl и предупреждают о подозрительных операциях, которые могут быть ошибками. - Первая строка функции обычно должна распаковывать
@_
;есть очень мало причин использовать $_[0]
непосредственно в функции.(И это опасно, так как @_
является псевдонимом; вы можете изменить переменные вызывающего!)
Так что вы, вероятно, захотите что-то похожее на это:
use strict;
use warnings;
sub tester {
my ($age) = @_;
if ($age < 10) {
return "you're a youngin'";
}
else {
return "you're an old fart";
}
}
print "how old are you? ";
my $age = <>;
chomp $age;
print tester($age);
Обратите внимание, что my $x = ...
объявляет одну переменную и присваивает одно значение, тогда как my ($x, $y, $z) = ...
объявляет несколько переменных и распаковывает в них список.
my
переменные называются лексическими и существуют только в блоке, где выобъявить их;они не являются функциональными областями, как переменные PHP.На самом деле вы должны просто прочитать о них в perlsub .