Обычно при передаче значений в подпрограммы Perl использует контекст списка, поэтому вы используете <> так же, как и
my @args = (<>, <>, <>);
Что, очевидно, не то, что вы хотите!
Вы можете включить скалярный контекст с помощью ключевого слова scalar
:
my @args = ( scalar <>, scalar <>, scalar <>); # read one
Или, прочитайте их все в переменные, чтобы люди знали, что вы собираетесь:
my $first = <>;
my $second = <>;
my $third = <>;
Кроме того, вы должны действительно проанализировать аргументы @_ перед их использованием. Это сделает вашу функцию более понятной. Пример:
sub quadratic2 {
my ($a, $b, $c) = @_;
... # now use the actual symbols instead of array indexes
}